一、在shell中,测试会设置返回的状态,test是一个内置命令,test会根据expr表达式的求值结果返回真或者假,同时也可以使用方括号[],test expr和[ expr ]是等价的,可以使用$?来检查返回值。
-o 操作符允许测试利用 set -o 选项 设置的各种 shell 选项,如果设置了该选项,则返回 True (0),否则返回 False (1)
1、文件判断
若判断符合则返回true,判断不符合则为false
-e 文件名 #文件存在则为真
-r 文件名 #文件存在且可读则为真
-w 文件名 #文件存在且可写则为真
-x 文件名 #文件存在且可执行则为真
-s 文件名 #文件存在且长度不为0则为真
-d 文件名 #文件存在且为目录则为真
-f 文件名 #文件存在且为普通文件则为真
-c 文件名 #文件存在且为字符型特殊文件则为真
-b 文件名 #文件存在且为块特殊文件则为真
2、数字判断
test num1 -eq num2 #num1=num2则为真
test num1 -ne num2 #num1!=num2时为真
test num1 -gt num2 #num1>num2时为真
test num1 -ge num2 #num1>=num2时为真
test num1 -lt num2 #num1<num2时为真
test num1 -le num2 #num1<=num2时为真
3、两个文件比对的测试
-nt #测试 file1 是否比 file2 更新。修改日期将用于这次和下次比较。
-ot #测试 file1 是否比 file2 旧。
-ef #测试 file1 是不是 file2 的硬链接。
4、字符串判断
#字符串比较:
str1 = str2 #str1=str2时为真
str1 != str2 #str1!=str2时为真
-z str1 #str1的长度为0的话返回真
-n str1 #str1长度不位0的话返回真
注意:
shell中会用到<和>操作符进行重定向,在使用<、>进行字符串的大小比较的时候需要进行转义=>(\<和>)
[]进行判断的时候[ “abc” > “def” ]中括号与字符串中间的空格必须存在!
二、(( )) 和 [[ ]]
(( ))复合命令 计算算术表达式,如果表达式求值为 0,则设置退出状态为 1;如果求值为非 0 值,则设置为 0。不需要对 (( 和 )) 之间的操作符转义。算术只对整数进行。除 0 会产生错误,但不会产生溢出。可以执行 C 语言中常见的算术、逻辑和位操作。 let 命令也能执行一个或多个算术表达式。它通常用来为算术变量分配值。
运行结果: