主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

Shell test 命令

test 命令用于在 Shell 脚本中执行条件检查。它检查给定的表达式是否成立,如果成立,则返回退出状态 0(代表 True),否则返回非零值(代表 False)。这个命令通常与 ifwhile 等语句结合使用来控制程序流程。

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
发表评论