test = = ]
检查字符串、比较整数和检查文件的属性。本文将通过简单的示例介绍 test 命令的常见用法。
检查字符串
判断字符串是否为空
检查字符串时,非空的字符串返回 true,空字符串或者没有参数都返回 false。
test ;
代码的输出结果为:
It
代码具有更清晰的含义:
test -n ;
代码的输出结果和上面一样。
一个空的字符串可以直接使用运算符 -z:
test -z ;
代码输出的结果仍然是:
It
判断字符串相等
支持两个运算符来判断字符串相等:= 和 ==。
abc=
test == ;
代码的输出结果为:
You got same .
abc=
test != ;
代码的输出结果为:
Your word is not .
代码会发现我们在引用变量时都用双引号包起来了,这是写 shell 脚本中的一个小技巧。尝试运行下面的代码:
abc=
test != $abc;
提示语法错误:
test != hello xx
一个合法的 test 命令,所以脚本执行时就报错了!错误。所以使用双引号包裹变量是一种保护机制,可以提高脚本的健壮性。
支持整数间的比较操作,可用的运算符有 '-eq','-ne','-lt','-le','-gt','-ge'。
num=
test -eq ;
代码的输出结果为:
num is .
n1 ------ge n2 : n1 大于或等于 n2
检查文件属性
检查文件的属性也是 test 常见用法。比如要检查一个文件的类型是不是普通文件,可以使用 -f 选项:
test.=
test -f ;
代码的输出结果为:
It
一个重要的选项是 -d,它用来检查一个路径是不是目录:
=
test -d ;
代码的输出结果为:
It
一个路径是否存在,可以使用 -e 运算符。它仅检查文件是否存在而不关心文件的具体类型。
文件检查运算符:
-b 文件存在并且是块设备文件。
-c 文件存在并且是字符设备文件。
-d 文件存在并且是一个目录。
-e 文件存在。
-f 文件存在并且是一般文件。
-g 文件存在并且设置了 setgid 位。
-h 文件存在并且是一个链接文件。
-p 文件存在并且是一个命名管道(FIFO)。
-r 文件存在并且是可读的。
-s 文件存在并且有内容。
-u 文件存在并且设置了 setuid。
- 文件存在并且是可写的。
-x 文件存在并且是可执行的。
-S : 文件存在并且是一个 socket。