Shell test 命令
test
命令用于在 Shell 脚本中执行条件检查。它检查给定的表达式是否成立,如果成立,则返回退出状态 0
(代表 True),否则返回非零值(代表 False)。这个命令通常与 if
、while
等语句结合使用来控制程序流程。
test
是 Shell 中用于检测条件是否成立的命令,支持对数值、字符串和文件三种类型进行测试。
test 命令有两种等效的语法:
✅ 使用test
关键字:
test EXPRESSION
✅ 使用方括号[ ]
(更常见):
[ EXPRESSION ]
非常重要:方括号[
实际上是一个命令的名称(是test
命令的另一种形式),因此它必须与表达式之间用空格隔开。写成[EXPRESSION]
是错误的。
文件测试操作
test
命令最常用于检查文件属性,以下是常用文件测试选项:
操作符 | 描述 | 示例 |
---|---|---|
-e |
检查文件是否存在 | [ -e file.txt ] |
-f |
检查是否为普通文件 | [ -f /path/to/file ] |
-d |
检查是否为目录 | [ -d /path/to/dir ] |
-r |
检查文件是否可读 | [ -r file.txt ] |
-w |
检查文件是否可写 | [ -w file.txt ] |
-x |
检查文件是否可执行 | [ -x script.sh ] |
-s |
检查文件大小是否大于零 | [ -s logfile ] |
-L |
检查是否为符号链接 | [ -L symlink ] |
这些操作符可以单独使用,也可以组合使用。例如,检查一个文件是否存在且可读:
实例代码
复制
#!/bin/bash
file="/etc/passwd"
if [ -e "$file" ]; then
echo "$file 存在"
if [ -r "$file" ]; then
echo "并且可读"
fi
else
echo "$file 不存在"
fi
输出结果为:
/etc/passwd 存在
并且可读
字符串比较
test
提供了丰富的字符串比较功能,包括精确匹配、模糊匹配、正则表达式等多种方式。
✅ 以下是常用的字符串比较操作符:
操作符 | 描述 | 示例 |
---|---|---|
-z STRING |
检查字符串是否为空 | [ -z "$var" ] |
-n STRING |
检查字符串是否非空 | [ -n "$var" ] |
STRING1 = STRING2 |
检查两个字符串是否相等 | [ "$var1" = "$var2" ] |
STRING1 != STRING2 |
检查两个字符串是否不相等 | [ "$var1" != "$var2" ] |
重要提示:字符串变量应该总是用双引号括起来,防止空变量导致语法错误。
以下是一个字符串比较的示例:
实例代码
复制
#!/bin/bash
read -p "输入用户名: " username
if [ -z "$username" ]; then
echo "错误:用户名不能为空"
exit 1
elif [ "$username" = "root" ]; then
echo "警告:不建议使用root账户"
else
echo "欢迎, $username"
fi
执行后,我们在终端输入 kaicz,输出结果类似如下:
输入用户名: kaicz
欢迎, kaicz
数值比较
在进行数值比较时,test
命令提供了多种操作符以供选用。
✅ 以下是常用的数值比较操作符:
操作符 | 描述 | 示例 |
---|---|---|
-eq |
等于 | [ "$a" -eq "$b" ] |
-ne |
不等于 | [ "$a" -ne "$b" ] |
-lt |
小于 | [ "$a" -lt "$b" ] |
-le |
小于或等于 | [ "$a" -le "$b" ] |
-gt |
大于 | [ "$a" -gt "$b" ] |
-ge |
大于或等于 | [ "$a" -ge "$b" ] |
以下是一个数值比较的示例:
实例代码
复制
#!/bin/bash
read -p "输入年龄: " age
if [ "$age" -lt 0 ]; then
echo "年龄不能为负数"
elif [ "$age" -lt 18 ]; then
echo "未成年人"
elif [ "$age" -ge 18 ] && [ "$age" -lt 60 ]; then
echo "您已经是成年人"
else
echo "您已经是老年人"
fi
执行后,我们在终端输入 18,输出结果类似如下:
输入年龄: 18
您已经是成年人
逻辑操作符
在 Shell 脚本中,test
命令还支持逻辑操作符,用于组合多个条件表达式。
✅ 常用的逻辑操作符包括:
操作符 | 描述 | 示例 |
---|---|---|
-a |
逻辑与(AND) | [ "$a" -eq 1 -a "$b" -eq 2 ] |
-o |
逻辑或(OR) | [ "$a" -eq 1 -o "$b" -eq 2 ] |
! |
逻辑非(NOT) | [ ! -f "$file" ] |
现代推荐写法:使用&&
和||
替代-a
和-o
,更符合 POSIX 标准:
实例代码
复制
#!/bin/bash
a=1
b=2
# 使用 if 语句
if [ "$a" -eq 1 ] && [ "$b" -eq 2 ]; then
echo "第一个条件为真"
else
echo "第一个条件为假"
fi
if [ "$a" -eq 1 ] || [ "$b" -eq 2 ]; then
echo "第二个条件为真"
else
echo "第二个条件为假"
fi
输出结果为:
第一个条件为真
第二个条件为真
评论区 0
发表评论
教程介绍
Linux 是一个开源、稳定、多用途的操作系统内核,广泛应用于服务器、云计算和嵌入式设备。
26
章节
18
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈