Bash提供了一些判断功能,使用Bash内置命令test即可实现测试工作或者使用[ 测试表达式 ]
注意[ 测试表达式 ]两边要留有空格
-h FILE 是否为链接文件
-f FILE 是否为普通文件
-b FILE 是否为块设备文件
-c FILE 是否为字符型文件
-a/-e FILE 是否存在
-d FILE 是否存在且为目录
-r FILE 是否存在且可读
-w FILE 是否存在且可写
-x FILE 是否存在且可执行
-s FILE 是否存在且非空
-n STRING 字符串长度是否为非0
-z STRING 字符串长度是否为0
整数比较:
-eq 等于 -ne不等于
-ge 大于等于 -le 小于等于
-gt 大于 -lt 小于
比如if [ "$a" -eq "$b" ]
字符串比较:
STRING1 == STRING2 字符串相等
STRING1 != STRING2S 字符串不相等
[] [[]]:
[[]] 支持正则表达式
用于判断数值的大小
[root@desktop30 tmp]# name=tangkai
[root@desktop30 tmp]# [ $name = tangkai ] 判断变量是否等于这个值
[root@desktop30 tmp]# echo $?
0
[root@desktop30 tmp]# [ $name = [Tt]angkai ] 如果只有一个[]号,系统会认为[Tt]angkai是字符
[root@desktop30 tmp]# echo $?
1
[root@desktop30 tmp]# [[ $name = [Tt]angkai ]] 在加一个[]号,[Tt]angkai才会被运算
[root@desktop30 tmp]# echo $?
0
例子:
test -d /etc/passwd && ehco "Y" || echo "N"
[ -e /etc/passwd ] && echo "Y" || echo "N"
[ -z $tt ] && echo "Y" || echo "N"
[ 22 -eq 22 ] && echo "Y" || echo "N"
[ 22 -ge 32 ] && echo "Y" || echo "N"