if语句的执行规则和这几类比较关系密切,顺带提下,本人在此有时搞混淆,以此为记。
bash shell中的if语句,如果命令的退出状态是0,将执行then后面的所有命令,如果命令的退出状态是0以外的其他值,那么then后面的命令将不会执行。
bash shell 中的test语句,如果test命令中列出的条件评估值为TRUE,test命令以0退出状态代码退出。有以下两种形式,if和test结合说明。注:condition左右两侧有一个空格。
if test condition
then
commands
fi
或者
if [ condition ]
then
commands
fi
test命令有以下3类评估条件:
1.数值比较
2.字符串比较
3.文件比较
数值比较
可以是变量也可以是数值也可以互相比较
比较 | 描述 | 比较 | 描述 |
n1 -eq n2 | 等于 | n1 -lt n2 | 小于 |
n1 -ge n2 | 大于等于 | n1 -le n2 | 小于等于 |
n1 -gt n2 | 大于 | n1 -ne n2 | 不等于 |
字符串比较
比较 | 描述 | 比较 | 描述 |
str1=str2 | 等于 | str1>str2 | 大于 |
str1!=str2 | 不等于 | -n str | 检查长度是否大于0 |
str1<str2 | 小于 | -z str | 检查长度是否为0 |
字符串比较会遇到两个问题:
1.大于小于号一定要转义,否则会当作重定向号。
2.大于和小于顺序与在sort命令中顺序不同,在test命令中,大写字母小于小写字母,而sort正好相反。
3.字符串比较变量尽量加双引号。
文件比较
比较 | 描述 |
---|---|
-d file | 检查文件是否是存在并且是一个目录 |
-e file | 检查文件是否存在 |
-f file | 检查file是否存在并且是一个文件 |
-s file | 检查file是否存在并且不为空 |
-w file | 检查file是否存在并且可写 |
-x file | 检查file是否存在并且可执行 |
-O file | 检查file是否存在并且被当前用户拥有 |
-G file | 检查file是否存在并且默认组为当前用户组 |
-r file | 检查文件是否存在并且可读 |
file1 -ot file2 | 检查file1是否比file2旧 |
file1 -nt file2 | 检查file1是否比file2新 |