第八学时 条件语句
10.1.1 一个简单的if语句
$ if 3>2;then echo 3; else echo 2;fi #这是在命令行下的形式
$ cat > test.sh
#!/bin/sh
if 3>2; then
echo 3
else
echo 2
fi
10.1.2 使用test
格式:test expression
简单的调用方式:[ expression ]#注意expression左右两边必须有两个空格
test可理解的表达式类型分为三类:
1.文件测试
2.字符串比较
3.数字比较
1.文件测试
文件测试表达式检查是否一个文件满足某种特殊规则。文件测试的通常语法为:
test option file或[ option file ]
例如:
$ if [ -d /home/ranga/bin ]; then PATH="$PATH:/home/ranga/bin"; fi
测试目录/home/ranga/bin是否存在,若存在,将其增加到变量PATH上。
test命令的文件测试选项
-b file
若文件存在且是一个块特殊文件,则为真。
-c file
若文件存在且是一个字符特殊文件,则为真。
-d file
若文件存在且是一个目录,则为真。
-e file
若文件存在则为真。
-f file
若文件存在且为一个规则文件则为真。
-h file
若文件存在且是一个符号链接,则为真。
-r file
若文件存在且可读,则为真。
-w file
若文件存在且可写,则为真。
-x file
若文件存在且可执行,则为真。
-o file
若文件存在且被有效用户ID所拥有,则为真。
2.字符串比较
test命令也支持简单的字符串比较
1)检查是否字符串为空
2)检查是否两个字符串相等
test命令中的字符串比较选项
-z string
若string长度为0,则为真
-n string
若string长度不为0,则为真
string1=string2
若两个字符串相等,则为真
string1!=string2
若两个字符串不相等,则为真
例如:
if [ -z "$FRUIT" ]; then
echo "Your fruit is empty";
else
echo "Your friut has the following fruit:$FRUIT"
fi
test命令的数字比较操作符
int1 -eq int2
若int1等于int2,则为真
int1 -ne int2
若int1不等于int2,则为真
int1 -lt int2
若int1小于int2,则为真
int1 -le int2
若int1小于等于int2,则为真
int1 -gt int2
若int1大于int2,则为真
int1 -ge int2
若int1大于等于int2,则为真
复合表达式
例如:
$ if [ -z "$DTHOME" ] && [ -d "/usr/dt" ] ;then DTHOME=/usr/dt ; fi
10.2 case语句
case word in
pattern1) list1 ;;
pattern2) list2 ;;
esac
这里的";;"相当于C、PHP中的break
例如:
#!/bin/sh
FRUIT=kiwi
case "$FRUIT" in
apple) echo "Apple" ;;
banana) echo "bannana" ;;
kiwi) echo "The value is kiwi" ;;
esac
使用模式
pattern是一个包含规则字符和特殊通配符的字符串,模式决定了匹配是否存在。
case "$TERM" in
*term)
TERM=exterm;;
network|dialup|unknown|vt[0-9]{1,3})
TERM=vt100;;
esac
若字符串以字符串"term"结尾,则$TERM赋值为xterm,否则,$TERM和字符串network,dialup,unknown,vt
[0-9]{1,3}比较,若与其中一个匹配,则$TERM被设为vt100