> 环境与工具 > test

test: 条件表达式求值

test 命令用于在 shell 脚本中构建条件语句。它可以评估各种条件表达式,例如检查文件类型或比较字符串和数值,并返回真(0)或假(1)。此返回值可用于 `if` 语句等控制结构。

概述

test 命令评估给定表达式,如果结果为真则返回退出状态 0,如果为假则返回 1。它主要用于 shell 脚本中的条件执行,如 `if` 和 `while` 语句。`[` 命令是 `test` 命令的另一种形式,而 `[[` 在 Bash/Ksh/Zsh 中提供了扩展功能。

主要功能

  • 检查文件类型和属性
  • 比较字符串值
  • 比较整数值
  • 逻辑运算(AND、OR、NOT)

主要选项

test 命令使用各种一元和二元运算符来评估条件表达式。

文件属性检查

字符串比较

整数比较

逻辑运算符

生成的命令:

请尝试组合命令。

描述:

`test` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

使用示例

使用 test 命令进行各种条件表达式求值的示例。

检查文件是否存在

if test -e /etc/passwd; then echo "/etc/passwd 文件存在。"; fi

检查 `/etc/passwd` 文件是否存在。

检查是否为目录

if test -d /tmp; then echo "/tmp 是一个目录。"; fi

检查 `/tmp` 是否为目录。

字符串比较

MY_VAR="hello"
if test "$MY_VAR" = "hello"; then echo "变量的值是 hello。"; fi

检查变量 `MY_VAR` 的值是否等于 'hello'。

整数比较

COUNT=15
if test "$COUNT" -gt 10; then echo "COUNT 大于 10。"; fi

检查变量 `COUNT` 的值是否大于 10。

逻辑 AND 运算

touch file.txt
if test -f file.txt -a -s file.txt; then echo "file.txt 存在且非空。"; fi
rm file.txt

检查 `file.txt` 是否存在且非空。

使用 `[` 代替 test

if [ -f /etc/hosts ]; then echo "/etc/hosts 文件存在。"; fi

`test` 命令可以用 `[` 替换。此时需要用 `]` 闭合。

提示与注意事项

使用 test 命令时的有用提示和注意事项。

主要提示

  • `[` 命令与 `test` 命令相同,最后需要用 `]` 闭合。`[` 和 `]` 被视为独立的参数,因此必须有空格。
  • `[[` 命令仅在 Bash、Ksh 和 Zsh 中支持,并提供更强大的功能(如正则表达式、空格处理等)。在 `[[` 内部,即使不引用变量也更安全。
  • 使用变量时,最好始终用双引号括起来(例如:`test "$VAR" = "value"`)。这可以防止变量为空或包含空格时可能出现的错误。
  • 进行整数比较时使用 `-eq`、`-ne`、`-gt`、`-lt`、`-ge`、`-le`,进行字符串比较时使用 `=`、`!=`、`-z`、`-n`。混淆使用可能导致意外结果。

相同类别命令