Shell退出状态和test命令(二)
02/02
本文最后更新于
2024年02月02日,已超过
393天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
test命令
可执行的命令执行会有退出状态,如果想对文件属性/字符串比较/数值大小关系比较进行测试操作获得退出状态呢?
我们可以通过test
命令进行以上测试。test命令执行结果是其参数比较的退出状态。
基本语法:
test 表达式
[ 表达式 ]
test命令的等价用法是[ ]
,一般我们都喜欢后一种用法。
几种常用的测试:
- 文件属性测试
表达式 | 测试为真 |
---|---|
-d file | file是目录 |
-e file | file存在 |
-f file | file为一般文件 |
示例:
$ test -d TMP
$ echo $?
0
$ [ -f foo ]
1
- 字符串测试
表达式 | 测试为真 |
---|---|
-n string | string是非null |
-z string | string是null |
s1 = s2 | 字符串s1与s2相同 |
s1 != s2 | 字符串s1与s2不同 |
示例:
$ var=hello
$ test -n "$var" #字符串非空
$ echo $?
0
$ test -n "$var1" #空字符串
$ echo $?
1
$ test -z "$var1"
$ echo $?
0
- 数字比较测试
表达式 | 测试为真 |
---|---|
n1 -eq n2 | 整数n1等于n2 |
n1 -ne n2 | 整数n1不等于n2 |
n1 -lt n2 | n1小于n2 |
n1 -le n2 | n1小于等于n2 |
n1 -gt n2 | n1大于n2 |
n1 -ge n2 | n1大于等于n2 |
示例:
$ test 1 -lt 10
$ echo $?
0
test运算符-a
和-o
不同于shell运算符&&
和||
用于连接多个命令逻辑组合,-a
和-o
是test运算符,用于连接test多个表达式。
$ test 1 -lt 10 -a -n "$var"
echo $?
1
$ [ 1 -lt 10 -o -n "$var" ]
$ echo $?
0
true和false命令
true命令退出状态永远为0,而false命令退出状态永远为1。
$ true; echo $?
0
$ false; echo $?
1
小结
- Shell中condition是检查命令执行的退出状态。
- test命令与
[]
等价,后一种用法更受欢迎。

