Linux test 命令使用技巧

[ 和 test 命令是在脚本编写中至关重要的条件语句。
8 位读者喜欢这篇文章。
Command line prompt

Opensource.com

[ 命令,通常被称为 “test”,是 GNU Core Utils 包中的一个命令,用于在 Bash 中启动条件语句。它的功能与 test 命令完全相同。当您只想在某个条件为真或假时执行命令,请使用 [test 命令。然而,[test[[ 之间存在显著差异,并且这些命令与 shell 自身版本之间也存在技术差异。

Linux 中的 [ 与 test 命令

由 GNU Core Utils 包安装的 [test 命令使用略有不同的语法执行相同的功能。(您可能会发现使用单个左方括号字符搜索文档很困难,因此许多用户觉得 test 更容易参考。)Bash 和类似的 shell 恰好内置了 [test 命令,并且内置版本取代了安装在 /usr/bin 中的版本。换句话说,当您使用 [test 时,您可能不是在执行 /usr/bin/[/usr/bin/test。相反,您调用的是 Bash shell 的一个基本功能。

您可能想知道为什么 [test 会存在于 /usr/bin 中。某些 shell,例如 tcsh,没有内置 [test,因此如果您想在该 shell 中使用这些命令,您必须将它们安装为单独的二进制文件。

底线是,只要您在键入以 [test 开头的命令时没有收到错误,那么您就拥有所需的一切。您的 shell 或 bin 目录提供这些命令几乎无关紧要。

测试文件是否存在

通常需要知道文件是否存在,通常是为了您可以自信地继续执行某些操作,或者为了避免用同名文件“覆盖”它。在交互式 shell 会话中,您可以直接查看文件是否存在,但在 shell 脚本中,您需要计算机自行确定。-e 选项测试文件是否存在,但其表面响应无论哪种方式都是相同的。

$ touch example
$ test -e example
$ test -e notafile
$

[test 命令本质上是开关。它们发出 truefalse 响应,但都将其视为成功。您可以通过将命令与逻辑运算符(例如 &&||)配对来使用它。当响应为 true 时,执行 && 运算符

$ touch example
$ test -e example && echo "foo"
foo
$ test -e notafile && echo "foo"
$

当响应为 false 时,执行 || 运算符

$ touch example
$ test -e example || echo "foo"
$ test -e notafile || echo "foo"
foo
$

如果您愿意,可以使用方括号代替 test。在所有情况下,结果都是相同的

$ touch example
$ [ -e example ] && echo "foo"
foo
$ [ -e notafile ] && echo "foo"
$

测试文件类型

Linux 中的一切都是文件,因此当您可以使用 -e 选项测试目录是否存在时,测试文件的方式也是相同的。但是,文件类型不同,有时这很重要。您可以使用 [test 来检测各种不同的文件类型

  • -f:常规文件(对于目录返回 false

  • -d:目录

  • -b:块设备(例如 /dev/sda1

  • -L-h:符号链接

  • -S:套接字

还有更多,但这些往往是最常见的。

测试文件属性

您还可以查看文件的元数据

  • -s:大小大于零的文件

  • -N:自上次读取以来已修改的文件

您可以按所有权进行测试

  • -O:当前主用户拥有的文件

  • -G:当前主组拥有的文件

或者您可以按权限(或文件模式)进行测试

  • -r:授予读取权限的文件

  • -w:授予写入权限的文件

  • -x:授予执行权限的文件

  • -k:设置了粘滞位的文件

组合测试

您不必总是只测试单个属性。-a 选项(“and”)允许您将多个测试串在一起,要求所有测试都返回 true

$ touch zombie apocalypse now
$ test -e zombie -a -e apocalypse -a -e now && echo "no thanks"
no thanks

如果任何表达式失败,则测试返回 false

$ touch zombie apocalypse now
$ test -e plant -a -e apocalypse -a -e now && echo "no thanks"
$

-o 选项(“or”)要求一个表达式为真

$ touch zombie apocalypse now
$ test -e zombie -o -e plant -o -e apocalypse && echo "no thanks"
no thanks

整数测试

您还可以测试整数。这不一定直接有用(您可能天生就知道 0 小于 1,例如),但当您在脚本中使用变量时,它非常宝贵。

一旦您理解了模式,这些运算符就相当直观

  • -eq:等于

  • -ne:不等于

  • -ge:大于或等于

  • -gt:大于

  • -le:小于或等于

  • -lt:小于

这是一个简单的例子

$ nil=0
$ foo=1
$ test $foo -eq $nil || echo "Those are not equal."
Those are not equal.
$ test $foo -eq 1 && echo "Those are equal."

当然,您可以组合测试。

$ touch example
$ test $foo -ne $nil -a -e example -o -e notafile && echo "yes"
yes

测试测试

[test 命令是在脚本编写中至关重要的条件语句。这些是控制代码流程的简单且常见的方法。可用的测试比我在本文中介绍的还要多,因此无论您使用 Bash、tcsh、ksh 还是其他 shell,请查看手册页以获取这些命令提供的完整范围。

标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算行业工作,经常同时进行。

2 条评论

内容丰富的文章,感谢您的帮助

涵盖了大部分入门级基本信息。谢谢

© 2025 open-source.net.cn. All rights reserved.