可以在Linux命令行上使用test命令将一个元素与另一个元素进行比较,但它更常用于BASH shell脚本中,作为控制逻辑和程序流的条件语句的一部分。


一个基本的例子

您只需​​打开终端窗口​​即可尝试这些命令。

test 1 -eq 2 && echo "yes" || echo "no"

上面的命令可以分解如下:

  • test - 这意味着您即将进行比较
  • 1 - 您要比较的第一个元素
  • -eq - 你是如何比较的。在这种情况下,您正在测试一个数字是否等于另一个数字。
  • 2 - 您要比较第一个元素的元素
  • && - 如果结果为true,则运行以下语句
  • echo“yes” - 比较返回true时运行的命令
  • || - 如果结果为false,则运行以下语句
  • echo“no” - 比较返回false时运行的命令

本质上,命令是比较1到2,如果它们匹配,则执行echo“yes”语句,显示“yes”,如果它们不匹配,则执行echo“no”语句,显示“no”。


比较变量

比较数字

如果要比较解析为数字的元素,可以使用以下比较运算符:

  • -eq - 值1等于2
  • -ge - 值1大于或等于值2
  • -gt - 值大于值2
  • -le - 值1小于或等于值2
  • -lt - 值小于值2
  • -ne - 值1不等于值2

例子

test 1 -eq 2 && echo "yes" || echo "no"

(在屏幕上显示“no”,因为1不等于2)

test 1 -gt 2 && echo "yes" || echo "no"

(在屏幕上显示“no”,因为1不大于2)

test 1 -le 2 && echo "yes" || echo "no"

(在屏幕上显示“是”,因为1小于或等于2)

test 1 -lt 2 && echo "yes" || echo "no"

(在屏幕上显示“是”,因为1小于或等于2)

test 1 -ne 2 && echo "yes" || echo "no"

(在屏幕上显示“是”,因为1不等于2)


比较文字

如果要比较解析为字符串的元素,可以使用以下比较运算符:

  • = - 字符串1匹配字符串2
  • != - 字符串1与字符串2不同
  • -n - 是大于0的字符串长度
  • -z - 是字符串长度0

例子

test "string1" = "string2" && echo "yes" || echo "no"

(在屏幕上显示“no”,因为“string1”不等于“string2”)

test -n "string1" && echo "yes" || echo "no"

(在屏幕上显示“是”,因为“string1”的字符串长度大于零)

test -z "string1" && echo "yes" || echo "no"

(在屏幕上显示“no”,因为“string1”的字符串长度大于零)


比较文件

如果要比较文件,可以使用以下比较运算符:

  • -ef - 文件是否具有相同的设备和inode编号(它们是相同的文件)
  • -nt - 第一个文件比第二个文件新
  • -ot - 第一个文件比第二个文件旧
  • -b - 文件存在且块特殊
  • -c - 文件存在且特征是字符
  • -d - 该文件存在且是一个目录
  • -e - 该文件存在
  • -f - 文件存在且是常规文件
  • -g - 文件存在且具有指定的组编号
  • -G - 文件存在且由用户组存在
  • -h - 文件存在且是符号链接
  • -k - 文件存在且设置了粘滞位
  • -L - 与-h相同
  • -O - 存在您是所有者的文件
  • -p - 该文件存在且是命名管道
  • -r - 该文件存在且可读
  • -s - 文件存在且大小大于零
  • -S - 该文件存在且是一个套接字
  • -t - 在终端上打开文件描述符
  • -u - 文件存在且set-user-id位已设置
  • -w - 文件存在且可写
  • -x - 该文件存在且可执行

例子

test / path / to / file1 -nt / path / to / file2 && echo“yes”

(如果file1比file2新,则会显示“是”字样)

test -e / path / to / file1 && echo“yes”

(如果存在file1,将显示“是”字样)

test -O / path / to / file1 && echo“yes”

(如果您拥有file1,则显示“是”字样“)

术语

  • 块特殊 - 文件是块设备,这意味着以字节块读取数据。这些通常是设备文件,如硬盘驱动器。
  • 特殊字符 - 当您写入文件时,该文件立即起作用,并且通常是诸如串行端口之类的设备


比较多个条件

到目前为止,一切都在比较一件事与另一件事,但如果你想比较两个条件呢?

例如,如果动物有4条腿并且“moo”,它可能是一头牛。简单地检查4条腿并不能保证你有一头牛,但确保检查声音。

要立即测试这两个条件,请使用以下语句:

test 4 -eq 4 -a "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"

这里的关键部分是-a代表

有一种更好,更常用的方法来执行相同的测试,如下所示:

test 4 -eq 4 && test "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"

您可能想要进行的另一个测试是比较两个语句,如果两个语句都为真,则输出一个字符串。例如,如果要检查名为“file1.txt”的文件是否存在,或者存在名为“file1.doc”的文件,则可以使用以下命令:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 does not exist"

这里的关键部分是-o代表

有一种更好,更常用的方法来执行相同的测试,如下所示:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 does not exist"


消除测试关键字

您实际上不需要使用单词test来执行比较。您所要做的就是将语句括在方括号中,如下所示:

[ -e file1.txt ] && echo "file1 exists" || echo "file1 does not exist"

[和]基本上与测试相同。

现在你知道了,你可以改进比较多个条件,如下所示:

[ 4 -eq 4 ] && [ "moo" = "moo" ] && echo "it is a cow" || echo "it is not a cow"
[ -e file1.txt ] || [ -e file1.doc ] && echo "file1 exists" || echo "file1 does not exist"


摘要

测试命令在脚本中更有用,因为您可以测试一个变量与另一个变量的值并控制程序流。在标准命令行上,您可以使用它来测试文件是否存在。


原文:​​https://www.lifewire.com/test-linux-command-unix-command-4097166​