if语句在任何编程中都是必不可少、至关重要的分支语句,shell也是如此,只不过各种编程中的方式和格式有点不太一样

shell编程中的if语句基本格式如下:

if [ X$1 = XA ];then
    command;
elif [ X$1 = XB ];then
    command;
else
    command;
fi

注意:[ ]前后都有空格和if以及变量分开

也可以写成如下形式:

if test X$1 = XA;then
    command
elif test X$1 = XB;then
    command
else
    command
fi

下面是一些常用的比较符号

数值比较相关参数:
-eq 等于,如:if [ "$a" -eq "$b" ] 
-ne 不等于,如:if [ "$a" -ne "$b" ] 
-gt 大于,如:if [ "$a" -gt "$b" ] 
-ge 大于等于,如:if [ "$a" -ge "$b" ] 
-lt 小于,如:if [ "$a" -lt "$b" ] 
-le 小于等于,如:if [ "$a" -le "$b" ] 
大于(需要双括号),如:(("$a" > "$b")) 
>= 大于等于(需要双括号),如:(("$a" >= "$b")) 

字符比较相关参数:
= 等于,如:if [ "$a" = "$b" ] 
== 等于,如:if [ "$a" == "$b" ],与=等价 

文件比较:
f1-nt f2      f1比f2修改时间新则返回真
f1-ot f2      f1比f2修改时间旧则返回真


[[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true 
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true 
3 [ $a == z* ] # File globbing 和word splitting将会发生 
4 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true 

普通判断
-a   and
-o   or
!       非

命令间使用如下and和or
&&  and
‖    or

文件类
string   字符串非空
-z string    为空则真
-n string    非空则真
-e FILE       文件存在为真
-f file         文件为普通文件为真
-d file        为目录时为真
-r file    文件是否有读权限
-w file 文件是否有写权限
-x file   文件是否有执行权限
-s file       如果file存在且大小不为0则为真
-O file      如果file存在且属于有效uid则为真
-g  file文件是否具有sgid
-G file   如果file存在且属于有效gid则为真
-u  file文件是否有suid
-k  file是否有粘滞位

03-29 01:26