测试语句
在编写shell脚本时,常遇到需要判断变量的值师傅相等,或者检查文件状态等,这时就需要测试语句进行测试才能决定下一步动作。shell脚本根据不同的数据类型设置了不同的条件语句的格式,使用test或者用中括号包围就可以执行条件测试语句,下面介绍常用的测试语句。
数值测试
二元测试语句
数值测试用于比较两个数值的大小,常用的测试语句如下:
- -eq:等于(equal)
- -ne:不等于(not equal)
- -gt:大于(greater than)
- -lt:小于(less than)
- -ge:大于等于(greater than or equal to)
- -le:小于等于(less than or equal to)
示例:
1 |
|
字符串测试
二元测试语句
字符串测试用于比较两个字符串是否相等,常用的测试语句如下:
- =:等于
- !=:不等于
- -z:字符串长度为0
- -n:字符串长度不为0
示例:
1 |
|
文件测试
文件测试分为文件状态测试和文件比较测试,以下是状态测试的部分
文件状态测试
一元测试语句
文件测试用于检查文件的状态,常用的测试语句如下:
- -e:文件存在(exist)
- -s:文件是否非空
- -S:文件是套接字文件(socket)
- -L:文件是软链接文件(symbolic link)
- -b:文件是块设备文件(block)
- -c:文件是字符设备文件(character)
- -d:文件是目录(dir)
- -f:文件是普通文件(file)
- -p:文件是管道文件(pipe)
- -r:文件可读(readable)
- -w:文件可写(writeable)
- -x:文件可执行(executable)
示例:
1 |
|
文件比较测试
二元测试语句
文件比较测试用于比较文件的大小,修改时间等信息,常用的测试语句如下:
- -nt:文件1比文件2新(newer than)
- -ot:文件1比文件2旧(older than)
- -ef:文件1和文件2是同一个文件(equals file)(判断两个文件是否是硬链接)
另外,还可以借用数值测试中的比较运算符进行文件大小比较,常用的测试语句如下:
- -eq:文件1和文件2大小相等(equal)
- -ne:文件1和文件2大小不相等(not equal)
- -le:文件1小于等于文件2(less than or equal)
- -ge:文件1大于等于文件2(greater than or equal)
示例:
1 |
|
复合测试
复合测试用于将多个测试条件组合在一起,常用的测试语句如下:
命令执行控制语句:
- &&:逻辑与(and)
- ||:逻辑或(or)
命令执行控制语句本质上是将多个命令的执行结果进行运算,并不能直接的将多个判断条件放在一条命令中
示例:
1 | test -e /home && test -r /home |
1 |
|
多重条件判定语句:
- -a:逻辑与(and)
- -o:逻辑或(or)
- !:逻辑非(not)
和命令执行控制语句不同,多重条件判断语句就是将多个条件用-a或者-o连接起来,如果条件为真,则整个表达式为真,否则为假。
示例:
1 | test -e /home -a -r /home |
可以看到这条示例中相比于前面的命令执行控制语句,少了一个 test ,这是因为在多重条件判断语句中,-a 和 -o 是默认的,所以可以省略,同时被视作一条命令。
1 |
|
条件表达式
条件表达式用于在shell脚本中执行条件判断,常用的测试语句如下: