Shell中有多种针对文件、字符串、数值的条件测试命令,用于检查某个条件是否成立。下面分别进行讲解。

三种测试的命令的表达方式

  • test,语法格式为:test <condition>
  • [ ],语法格式为:[ <condition> ]
  • [[ ]],语法格式为:[[ <condition> ]]
    前两种的条件格式一样,可以通用,仅仅是写法的不同。但双中括号形式是前两者的扩展,可以在测试语句中使用与 &&、或 ||来同时对几种条件进行测试,而在单中括号或test中则需要利用-a和-o来表示与和或,且与或非的优先级依次递减。

三种测试用途

一、数值测试

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

实例

[root@host]# a=5
[root@host]# test $a -eq 5
0
[root@host]# [ $a -gt 8 ] &&echo 0 ||echo 1
1
[root@host]# [[ $a -le 5 ]] &&echo 0 ||echo 1
0

二、字符串测试

  1. 对于字符串比较测试,务必记住无论是常量字符串还是变量应用一定一定要在两端加双引号.
  2. 在比较关系符两端一定要加空格。
参数 说明
= 等于则为真(=两端要加空格)
!= 不等于则为真(=两端要加空格)
> 大于则为真(仅用于[[ ]],加空格)
< 小等则为真(仅用于[[ ]],加空格)
-n 字符串长度不为0则为真
-z 字符串为空则为真

实例

[root@host]# a="leon"
[root@host]# test -n "$a" &&echo 0 ||echo 1
0
[root@host]# [ "$a" = "leo" ] &&echo 0 ||echo 1
1
[root@host]# [[ "$a" > "leo" ]] &&echo 0 ||echo 1
0

三、文件测试

参数 说明
-e 文件存在则为真
-f 文件存在,且为普通文件则为真
-d 文件存在,且为目录文件则为真
-L 文件存在,且为链接文件则为真
-c 文件存在,且为字符设备文件则为真
-b 文件存在,且为块设备文件则为真
-r 文件存在,且为可读文件则为真
-w 文件存在,且为可写文件则为真
-x 文件存在,且为可执行文件则为真
-s 文件存在,且为非空文件则为真

实例

[root@host]# a=/bin/ls
[root@host]# test -x "$a" &&sh $a
a.c   b.c   d.sh 
[root@host]# [[ -x "$a" && -s "$a" ]] &&echo0||echo1
0