写Shell脚本时,有时要判断字符串是否相等,可能还要检查文件状态或是数字测试。基于这些测试才能做进一步动作。
1、文件测试
测试文件状态的操作符如下:
测试时使用逻辑操作符
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
下面比较两个文件: 下面的例子测试两个文件是否均可读。 结果为真。
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
下面比较两个文件: 下面的例子测试两个文件是否均可读。 结果为真。
2、字符串测试
字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。
字符串测试的操作符有三种。
3、测试数值
测试数值可以使用许多操作符,可以是:
下面的例子返回结果都一样。均为测试两个数是否相等(130是否等于130)。
结果果然正确。
可以不必将整数值放入变量,直接用数字比较即可,但要加引号。
可以用逻辑操作符将两个测试表达式结合起来。仅需要用到一对方括号,而不能用两个,否则将返回错误信息“ too many arguments”。
下面例子测试两个表达式,如果都为真,结果为真,正确使用方式应为:
4、test、[] 、[[]]、(())的异同
[[ 是 bash 程序语言的关键字,而其他是内建命令!
$ type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin
绝大多数情况下,这个三个功能通用。但是命令和关键字总是有区别的。命令和 关键字的差别有多大呢?
如果是命令,它把参数作为比较表达式或文件测试,并且根据比较结果,返回一个退出码。那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。关键字把整个表达式看作一个单独的元素,并且返回一个退出码。[[]]结构比[]更灵活,是一个扩展的test命令。
(())可以应用于算术表达式的运算,并将结果作为退出码。如果表达式结果为0,则返回1作为退出码,否则返回0作为退出码。
