条件测试: test, [
整数变量表达式文件表达式字符串变量表达式 逻辑运算符举例参考
条件测试: test, [[ : 是一个命令的名字,传给[ 的参数必须用空格隔开。如果为真,则该命令的退出状态为0。如果测试结果为假,则命令的退出状态为1。
$ VAR=2 $ [ "$VAR" -gt 3 ] $ echo $? 1
整数变量表达式注意:如果$VAR变量没有定义,则被shell展开为空,造成表达式格式错误。
作为一种好的shell编程习惯,应该总是把变量取值放在双引号之中
| 格式 | 含义 |
|---|---|
| [ ARG1 OP ARG2 ] | ARG1和ARG2应该时整数或者取值为整数的变量, OP含义见下表 |
| OP | 含义 |
|---|---|
| -eq | 比较两个参数是否相等(例如,if [ 2 –eq 5 ]) |
| -ne | 比较两个参数是否不相等 |
| -lt | 参数1是否小于参数2 |
| -le | 参数1是否小于等于参数2 |
| -gt | 参数1是否大于参数2 |
| -ge | 参数1是否大于等于参数2 |
文件表达式注意:比较的是字符串的值,不是数字
| 格式 | 含义 |
|---|---|
| [ -f FILE ] | 文件FILE存在,则为真(例如,if [ -f “filename” ]) |
| [ -d DIR ] | DIR目录存在, 则为真 |
| [ -s FILE ] | 文件存在且非空 |
| [ -r FILE ] | 文件存在且可读 |
| [ -w FILE ] | 文件存在且可写 |
| [ -x FILE ] | 文件存在且可执行 |
| 格式 | 含义 |
|---|---|
| [ -n $string ] | string 长度非零,则为真 |
| [ -z $string ] | string 长度为零,则为真 |
| [ $string1 = $string2 ] | 两个字符串相同则为真,=两边必须有空格 |
| [ $string1 != $string2 ] | 两个字符串不同则为真 |
表达式之间还可以做成“与”,“或”和“非”逻辑运算。和C语言类似,具有Short-circuit特性。EXPRn可以是上述任意一种表达式:
| 格式 | 含义 |
|---|---|
| [ ! EXPR1] | !逻辑反 |
| [ EXPR1 -a EXPR2 ] | -a 逻辑与和&&等价 |
| [ EXPR1 -o EXPR2 ] | -o 逻辑或和||等价 |
有目录shell的存在,且VAR=abc。符合条件返回真
$ mkdir shell $ VAR=abc $ [ -d shell -a "$VAR" = 'abc' ] $ echo $? 0
有目录shell的存在,但VAR不等abcde。不符合条件返回假
$ test -d shell && "$VAR" = 'abcde' $ echo $? 1参考
Linux C编程一站式学习



