Skip to main content

如何在Bash脚本中使用测试条件

07 02 bash脚本编程之六 使用脚本选项及组合条件测试 (六月 2025)

07 02 bash脚本编程之六 使用脚本选项及组合条件测试 (六月 2025)
Anonim

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

一个基本的例子

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

测试1 -eq 2 && echo“yes”||回声“不”

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

  • 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

例子

测试1 -eq 2 && echo“yes”||回声“不”

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

test 1 -ge 2 && echo“yes”||回声“不”

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

test 1 -gt 2 && echo“yes”||回声“不”

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

测试1 -le 2 && echo“是”||回声“不”

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

测试1 -lt 2 && echo“是”||回声“不”

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

test 1 -ne 2 && echo“yes”||回声“不”

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

比较文字

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

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

例子

test“string1”=“string2”&& echo“yes”||回声“不”

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

测试“string1”!=“string2”&& echo“yes”||回声“不”

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

test -n“string1”&& echo“yes”||回声“不”

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

test -z“string1”&& echo“yes”||回声“不”

(在屏幕上显示“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条腿并不能保证你有一头牛,但确保检查声音。

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

测试4 -eq 4 -a“moo”=“moo”&& echo“它是一头牛”||回声“它不是牛”

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

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

测试4 -eq 4 &&测试“moo”=“moo”&& echo“它是一头牛”||回声“它不是牛”

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

test -e file1.txt -o -e file1.doc && echo“file1 exists”|| echo“file1不存在”

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

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

test -e file1.txt || test -e file1.doc && echo“file1 exists”|| echo“file1不存在”

消除测试关键字

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

-e file1.txt && echo“file1 exists”|| echo“file1不存在”

和基本上与测试相同。

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

4 -eq 4 && “moo”=“moo” && echo“它是一头牛”||回声“它不是牛”-e file1.txt || -e file1.doc && echo“file1 exists”|| echo“file1不存在”

摘要

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