test 命令是 Linux/Unix 系统中用于条件测试的实用程序,主要用于 shell 脚本中进行条件判断。它也被称为 [ 命令(左方括号),因为 test 和 [ 实际上是同一个命令。
语法格式
[ EXPRESSION ]
[[ EXPRESSION ]] # bash 的扩展测试命令
常见测试类型
1. 文件测试
-e FILE: 文件/目录是否存在-f FILE: 是否为常规文件-d FILE: 是否为目录-r FILE: 文件是否可读-w FILE: 文件是否可写-x FILE: 文件是否可执行-s FILE: 文件大小是否大于0-L FILE: 是否为符号链接
示例:
bash
if [ -f "/etc/passwd" ]; then
echo "文件存在"
fi
2. 字符串测试
-z STRING: 字符串长度是否为0-n STRING: 字符串长度是否非0STRING1 = STRING2: 字符串是否相等STRING1 != STRING2: 字符串是否不等
示例:
bash
if [ "$USER" = "root" ]; then
echo "当前用户是root"
fi
3. 数值比较
INTEGER1 -eq INTEGER2: 等于INTEGER1 -ne INTEGER2: 不等于INTEGER1 -gt INTEGER2: 大于INTEGER1 -ge INTEGER2: 大于等于INTEGER1 -lt INTEGER2: 小于INTEGER1 -le INTEGER2: 小于等于
示例:
bash
if [ "$#" -ne 2 ]; then
echo "需要2个参数"
exit 1
fi
4. 逻辑操作符
! EXPRESSION: 逻辑非EXPRESSION1 -a EXPRESSION2: 逻辑与EXPRESSION1 -o EXPRESSION2: 逻辑或
示例:
bash
if [ -f "$file" -a -r "$file" ]; then
echo "文件存在且可读"
fi
高级用法
1. 组合测试
bash
if [ "$age" -gt 18 -a "$age" -lt 60 ]; then
echo "适龄工作者"
fi
2. 使用 [[ ]] (bash 特有)
[[ ]] 是 bash 的扩展测试命令,支持更多特性:
- 支持模式匹配:
[[ $var == *.txt ]] - 支持正则表达式:
[[ $var =~ ^[0-9]+$ ]] - 不需要引号包裹变量
- 逻辑操作符使用
&&和||
示例:
bash
if [[ "$file" == *.txt && -r "$file" ]]; then
echo "这是一个可读的文本文件"
fi
3. 测试命令返回值
bash
if grep -q "error" logfile; then
echo "日志文件中包含错误"
fi
实际应用示例
1. 检查文件是否存在并备份
bash
file="data.txt"
if [ -f "$file" ]; then
cp "$file" "${file}.bak"
echo "已创建备份文件 ${file}.bak"
else
echo "文件 $file 不存在"
fi
2. 检查参数数量
bash
if [ $# -lt 1 ]; then
echo "用法: $0 文件名"
exit 1
fi
3. 检查用户输入
bash
read -p "输入年龄: " age
if [[ "$age" =~ ^[0-9]+$ ]]; then
if [ "$age" -ge 18 ]; then
echo "成年人"
else
echo "未成年人"
fi
else
echo "请输入有效数字"
fi
注意事项
- 使用
[ ]时,括号与表达式之间必须有空格 - 字符串比较时,变量最好用引号包裹,防止空变量或包含空格的情况
- 数值比较不能使用
>,<等符号,必须使用-gt,-lt等操作符 - 在 bash 脚本中,推荐使用
[[ ]]替代[ ],因为它更安全且功能更强大