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

====

posted on 2012-01-11 14:43  perlman  阅读(485)  评论(0编辑  收藏  举报

导航