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

Linux测试对另一个命令将一个元素,但是它更常用BASH shell脚本作为的一部分条件语句控制逻辑和程序流。

一个基本的例子

测试的例子

试试这些命令一个终端窗口

测试1情商2 & &回声“是的”| |回声“不”

上面的命令分解如下:

  • 测试:命令执行比较
  • 1你要比较:第一个元素。在本例中,它是数字1但它可以是任何数,或一个字符串引号。
  • - gydF4y2Ba情商:比较的方法。在这种情况下,您正在测试一个值是否等于另一个。
  • 2:你比较第一个元素的元素。在本例中,它是数字2。
  • & &:Linux快捷命令链在一起,在序列。测试链的命令的输出。使用执行当它前面的命令的退出状态为0,这是一个幻想的说法命令没有失败。
  • 回声“是的”:如果比较成功运行的命令。在这种情况下,我们要做的是要求回声命令打印标准输出“yes”这个词,但你可以运行任何命令,执行如果试验结果证明是真的。
  • | |相反的,在某种程度上,& &;它前面的套管只有执行命令失败(有一个退出状态,不是0)。
  • 回应“不”:命令运行如果比较失败。

运行shell提示符,测试不返回一个值到标准输出,它仅仅返回一个退出状态代码。这就是为什么链接一个echo命令是必要的。

测试退出状态

本质上,该命令比较1 - 2,如果他们匹配,echo语句执行“是的”显示“是”,如果他们不匹配,回声执行“不”语句显示“没有。”

比较数据

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

  • 情商:1 =价值2
  • 通用电气:值1大于或等于2
  • gt2:价值大于价值
  • :价值1值小于或等于2
  • lt2:价值1不到价值
  • - ne2:价值1不等于价值

示例测试

测试1情商2 & &回声“是的”| |回声“不”

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

测试1通用电气2 & &回声“是的”| |回声“不”

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

测试1 gt 2 & &回声“是的”| |回声“不”

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

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

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

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

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

测试1 - ne 2 & &回声“是的”| |回声“不”

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

比较文本

当你比较元素,解析字符串,使用下面的比较运算符:

  • =2:字符串匹配字符串
  • ! =2:字符串不匹配字符串
  • - n:字符串长度大于0
  • - z:字符串长度等于0

例子

测试“string1”=“string2相等”& &回声“是的”| |回声“不”

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

测试”string1 " ! = " string2相等”& &回声“是的”| |回应“不”

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

测试- n“string1”& &回声“是的”| |回声“不”

(屏幕显示“是”,因为“string1”有一个字符串长度大于零)

测试- z“string1”& &回声“是的”| |回声“不”

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

比较文件

当你比较文件,使用下面的比较运算符:

  • 英孚:文件有相同的设备和inode号(他们是同一个文件)
  • - nt:第一个比第二个更新的文件
  • :第一个比第二个大文件
  • - b:文件存在,块特殊
  • - c:文件存在,性格特别
  • - d:文件存在并且是一个目录
  • - e:文件存在
  • - f:文件存在,是一个常规文件
  • - g:文件是否存在,并指定的组数
  • - g:文件存在和所有者的用户组
  • - h- l:文件存在,是一个符号链接
  • - k:文件存在,有其粘贴位设置
  • - o:你老板的文件存在
  • - p:文件存在,是一个命名管道
  • - r:文件存在并且是可读的
  • - s:文件存在,大小大于零
  • - s:文件存在,是一个套接字
  • - t:打开文件描述符终端
  • - u:文件存在和set-user-id设置
  • - w:文件存在并且是可写的
  • - x:该文件存在并且是可执行的

例子

测试/道路/ / file1 - nt /路径/ / file2 & &回声“是的”

(如果更新比file1 file2然后将显示“是”这个词)

测试- e /道路/ / file1 & &回声“是的”

(如果file1存在“是的”这个词将会显示)

测试- o /道路/ / file1 & &回声“是的”

(如果你拥有file1然后显示“是””这个词)

块特殊:文件是一个块设备这意味着读取数据块的字节。这些通常是硬盘等设备文件。

性格特别:文件当你写立即执行,通常是一个串口等设备

比较多个条件

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

例如,如果一个动物有四条腿,“moo”,它可能是一头奶牛。只是检查四条腿并不能保证你有一头奶牛,但检查声音的确如此)。

测试两种条件下,使用以下语句:

测试4情商——“moo”=“moo”& &回声“一头牛”| |回声“这不是牛”

这是关键的部分——一个国旗,这代表

有一个更好、更常用的方法执行相同的测试,如下:

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

跟着树枝!

的分支测试命令是显著的。如果第一个测试(4 = 4)失败,测试与一个非零退出代码命令终止。因此,我们跳转到套管的象征,“这不是一个牛”打印到标准输出。但是,如果第一个测试成功,因此测试结果的退出代码0,然后跳转到第一个使用。下一个语句是另一个测试条件!

如果第二次测试失败,再一次,我们跳到套管和从那里出发。然而,如果第二个测试成功,我们跳到第二个使用声明,在这个例子只是回应“这是一头牛”到标准输出,然后终止shell提示符。

另一项测试比较两个语句,如果是真的,输出一个字符串。例如,检查一个文件名为“file1。txt”存在或文件称为“file1。医生”存在,您可以使用以下命令:

测试- e file1。txt - o - e file1。医生& &回声“file1存在”| |回声“file1不存在”

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

有一个更好、更常用的方法执行相同的测试,如下:

测试- e file1。txt | |测试- e file1。医生& &回声“file1存在”| |回声“file1不存在”

消除测试关键字

实际上你不需要使用这个词测试执行比较。所有你要做的就是将方括号中的语句如下:

[- e file1。txt) & &回声”file1存在“| |回声“file1不存在”

(]想要表达的意思是一样的测试

现在你知道你可以改善比较多个条件如下:

[4 eq 4] & & & & (“moo”=“moo”)回声“一头牛”| |回声“这不是牛”

[- e file1。txt) | | - e file1。doc) & &回声”file1存在“| |回声“file1不存在”

总结

测试命令在脚本中更有用,因为你可以测试一个变量对另一个的价值和控制程序流。在命令行上,用它来测试一个文件是否存在。

这个页面是有用吗?