Shell编程 - 流控制
if语句
1 写if语句时不要随意加空格,比如if [ 1<2 ],这是假,而if [ 1 < 2 ]就是真了,因为1和<之间有空格。注意[]与1,2之间的空格是合法的,总结一下就是,Shell中表达式中最好不要加空格,比如a=1, 1<2, 2=2等等,如果加上空格,往往会产生错误。
2 使用test,格式:if test expression
if test 1<2
then echo "no"
else echo "yes"
fi
输出yes
使用[],格式:if [ expression ] (注意:[]与表达式之间有一个空格)
if [ 2<1 ]
then echo "no"
else echo "yes"
fi
输出no
3 使用[]可以进行三种比较,文件测试,字符串比较,数字比较
(1)文件测试,判断sh.exe是否存在
if [ -e sh.exe ] #判断目录是否存在用-d
then echo "sh.exe exists"
else echo "sh.exe does not exists"
fi
(2)字符串比较
-z string 若string长度为0,则为真
-n string 若string长度不为0,则为真
string1=string2 若两字符串相等,则为真
string1!=string2 若两字符串不等,则为真
if [ "abc"="abc" ]
then echo "yes"
else echo "no"
fi
(3)数字比较
[int1 operator int2],这里int1和int2都是整数,如果有一个是字符串,则按0对待,操作符可以是下面这些
-eq 等于
-ne 不等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
数字比较常用来检测一个命令是否成功执行,在shell中成功执行的命令返回0,而非零整数则表示命令出错,下面是一个例子
if [ $? -ne 0 ] # $?保存一个命令,一个脚本或者一个函数的退出状态
then echo " An error was encountered"
exit
fi
4 compound expressioin 复合表达式
!expr 将expr的bool值取反
expr1 -a expr2 相当于 [ expr1 ] && [ expr2 ]
expr1 -o expr2 相当于 [ expr1 ] || [ expr2 ]
而[expr1] && [expr2] 还有一种等价写法 [[ expr1 && expr2 ]]
下面的两个命令是等价的
if [ -z "$DTHOME" ] && [ -d /usr/dt ] ; then DTHOME=/usr/dt ; fi
if [ -z "$DTHOME" -a -d /usr/dt ] ; then DTHOME=/usr/dt ; fi
5 case语句
case word in
pattern1)
list1
;;
pattern2)
list2
;;
esac
或者
case word in
pattern1) list1 ;;
pattern2) list2 ;;
esac
case语句的强大之处再于它可以使用模式,比如
case "$TERM" in
*term)
TERM=xterm ;;
network|dialup|unknown|vt[0-9][0-9][0-9])
TERM=vt100 ;;
esac
====