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是否有粘滞位