test 是 Linux Shell 中的一个内建命令(built-in command),它的核心作用是评估一个条件表达式,并根据结果为真(True)或假(False)设置退出状态码(Exit Status)。
在 Shell 脚本中,它主要用于条件判断,是 if、while、until 等控制结构的基础。
2、核心机制:退出状态码
test 命令本身不输出 "True" 或 "False" 字符串,而是通过返回的退出状态码来传达结果:
你可以直接在命令行中测试,并通过 echo $? 查看上一条命令的返回值:
#bashtest 1 -eq 1 # 判断 1 是否等于 1echo $? # 输出 0,表示真test 1 -eq 2echo $? # 输出 1,表示假
4、test 可以测试什么?
| |
|---|
-e FILE | |
-f FILE | |
-d FILE | |
-s FILE | |
-r/-w/-x FILE | |
FILE1 -nt FILE2 | FILE1 比 FILE2 更新(newer than)。 |
| |
|---|
-z STRING | |
-n STRING | |
STR1 = STR2 | |
STR1 != STR2 | |
STR1 > STR2 | STR1 按字典序大于 STR2(需转义,如 \>)。 |
| |
|---|
INT1 -eq INT2 | |
INT1 -ne INT2 | |
INT1 -gt INT2 | |
INT1 -lt INT2 | |
INT1 -ge INT2 | |
INT1 -le INT2 | |
#bashif [ -f "/etc/passwd" ]; then echo "密码文件存在"fi
#bash# 确保变量有值,避免报错if [ -z "$VAR" ]; then echo "变量 VAR 未设置或为空"fi
#bash# 如果文件存在,则显示其内容test -f "myfile.log" && cat myfile.log# 如果目录不存在,则创建它[ -d "/tmp/backup" ] || mkdir -p /tmp/backup
bashif [ "$COUNT" -gt 10 ]; then echo "计数大于 10"fi
空格至关重要:使用 [ 时,括号内外的空格不能少。[ -f file ] 正确,[-f file] 或 [ -f file] 都会报错。
变量加引号:为防止变量为空导致语法错误,建议始终将变量用双引号括起来,如 [ "$VAR" = "abc" ]。如果使用 [[ ]],则无需担心此问题。
逻辑组合:在 test 或 [ ] 中,用 -a(且)和 -o(或)连接条件;在 [[ ]] 中,用 && 和 ||,语义更清晰。
test 命令是 Linux 脚本编程中最基础、最常用的工具之一,掌握它能为编写健壮的自动化脚本打下坚实基础。