在linux shell中,有时需要判断字符串是否相等,有时需要检查文件状态或进行数字测试。 那么,本节就带领大家学习下shell脚本中有关条件测试的相关知识。
1、文件测试
-d 目录 -s 文件长度大于0、非空
-f 正规文件 -w 可写 -L 符号连接 -u 文件有suid位设置 -r 可读 -x 可执行
测试时使用逻辑操作符
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。 ! 逻辑否,条件为假,结果为真。
1)、比较两个文件:
复制代码代码示例:
[root@localhost ~]# ls -l results.txt scores.txt
-rwxr-xr-x 1 root root 0 Nov 21 12:22 results.txt -rw-r--r-- 1 root root 0 Nov 21 12:15 scores.txt
2)、测试两个文件是否均可读。
复制代码代码示例:
[root@localhost ~]# [ -w results.txt -a -w scores.txt ]
[root@localhost ~]# echo $? 0 结果为真。
2、字符串测试
== 两个字符串相等
!= 两个字符串不等 -z 字符串为空 -n 非空字符串
3、测试数值
-eq 数值相等
-ne 数值不相等 -gt 第一个数大于第二个数 -lt 第一个数小于第二个数 -le 第一个数小于等于第二个数 -ge 第一个数大于等于第二个数
测试两个数是否相等(130是否等于130)。
复制代码代码示例:
[root@localhost ~]# NUMBER=130
[root@localhost ~]# [ "$NUMBER" -eq "130" ] [root@localhost ~]# echo $? 0 结果果然正确。
可以不必将整数值放入变量,直接用数字比较即可,但要加引号。
复制代码代码示例:
[root@localhost ~]# [ "990" -le "995" ]
[root@localhost ~]# echo $? 0
可以用逻辑操作符将两个测试表达式结合起来。
复制代码代码示例:
[root@localhost ~]# [ "990" -le "995" ] -a [ "123" -gt "33" ]
-bash: [: too many arguments
测试两个表达式,如果都为真,结果为真,正确使用方式应为:
复制代码代码示例:
[root@localhost ~]# [ "990" -le "995" -a "123" -gt "33" ]
[root@localhost ~]# echo $? 0
4、test、[] 、[[]]、(())的异同
$ type [ [[ test
[ is a shell builtin [[ is a shell keyword test is a shell builtin
注意: |