可以在Linux命令行上使用test命令将一个元素与另一个元素进行比较,但它更常用于BASH shell脚本中,作为控制逻辑和程序流的条件语句的一部分。
一个基本的例子
您只需打开终端窗口即可尝试这些命令。
上面的命令可以分解如下:
- 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
例子
(在屏幕上显示“no”,因为1不等于2)
(在屏幕上显示“no”,因为1不大于2)
(在屏幕上显示“是”,因为1小于或等于2)
(在屏幕上显示“是”,因为1小于或等于2)
(在屏幕上显示“是”,因为1不等于2)
比较文字
如果要比较解析为字符串的元素,可以使用以下比较运算符:
- = - 字符串1匹配字符串2
- != - 字符串1与字符串2不同
- -n - 是大于0的字符串长度
- -z - 是字符串长度0
例子
(在屏幕上显示“no”,因为“string1”不等于“string2”)
(在屏幕上显示“是”,因为“string1”的字符串长度大于零)
(在屏幕上显示“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 - 该文件存在且可执行
例子
(如果file1比file2新,则会显示“是”字样)
(如果存在file1,将显示“是”字样)
(如果您拥有file1,则显示“是”字样“)
术语
- 块特殊 - 文件是块设备,这意味着以字节块读取数据。这些通常是设备文件,如硬盘驱动器。
- 特殊字符 - 当您写入文件时,该文件立即起作用,并且通常是诸如串行端口之类的设备
比较多个条件
到目前为止,一切都在比较一件事与另一件事,但如果你想比较两个条件呢?
例如,如果动物有4条腿并且“moo”,它可能是一头牛。简单地检查4条腿并不能保证你有一头牛,但确保检查声音。
要立即测试这两个条件,请使用以下语句:
这里的关键部分是-a代表和。
有一种更好,更常用的方法来执行相同的测试,如下所示:
您可能想要进行的另一个测试是比较两个语句,如果两个语句都为真,则输出一个字符串。例如,如果要检查名为“file1.txt”的文件是否存在,或者存在名为“file1.doc”的文件,则可以使用以下命令:
这里的关键部分是-o代表或。
有一种更好,更常用的方法来执行相同的测试,如下所示:
消除测试关键字
您实际上不需要使用单词test来执行比较。您所要做的就是将语句括在方括号中,如下所示:
[和]基本上与测试相同。
现在你知道了,你可以改进比较多个条件,如下所示:
摘要
测试命令在脚本中更有用,因为您可以测试一个变量与另一个变量的值并控制程序流。在标准命令行上,您可以使用它来测试文件是否存在。
原文:https://www.lifewire.com/test-linux-command-unix-command-4097166