可以在Linux命令行上使用测试命令将一个元素与另一个元素进行比较,但它在BASH shell脚本中更常用作控制逻辑和程序流的条件语句的一部分。
一个基本的例子
您只需打开一个终端窗口即可尝试这些命令。
测试1 -eq 2 &&回声“是”|| 回声“不”
上述命令可以细分如下:
- 测试 - 这意味着您即将进行比较
- 1 - 你要比较的第一个元素
- -eq(你如何比较,在这种情况下,你是在测试一个数字是否等于另一个数字)
- 2 - 您正在比较第一个元素的元素
- && - 如果结果为true,请运行以下语句
- echo“yes” - 如果比较返回true,则运行该命令
- || - 如果结果为假,请运行以下语句
- echo“no” - 如果比较返回false,则运行该命令
实质上,该命令比较1到2,并且它们匹配回显“是”语句被执行,其显示“是”,并且如果它们不匹配,回显“否”语句显示“否”。
比较数字
如果你比较的元素是数字解析,你可以使用下面的比较运算符:
- -eq - 值为1等于2
- -ge - 值1大于或等于值2
- -gt - 值1大于值2
- -le - 值1小于或等于值2
- -lt - 值1小于值2
- -ne - 值1不等于值2
例子:
测试1 -eq 2 &&回声“是”|| 回声“不”
(因为1不等于2,所以向屏幕显示“否”)
测试1 -ge 2 && echo“yes”|| 回声“不”
(屏幕显示“否”,因为1不大于或等于2)
测试1 -gt 2 &&回声“是”|| 回声“不”
(由于1不大于2,因此在屏幕上显示“否”)
测试1 -le 2 &&回声“是”|| 回声“不”
(因为1小于或等于2,所以对屏幕显示“是”)
测试1 -lt 2 &&回声“是”|| 回声“不”
(因为1小于或等于2,所以对屏幕显示“是”)
测试1 -ne 2 &&回声“是”|| 回声“不”
(因为1不等于2,所以对屏幕显示“是”)。
比较文字
如果您比较解析为字符串的元素,则可以使用以下比较运算符:
- = - 字符串1是否匹配字符串2
- != - 字符串1不同于字符串2
- -n - 是大于0的字符串长度
- -z - 是字符串长度0
例子:
测试“string1”=“string2”&&回声“是”|| 回声“不”
(因为“string1”不等于“string2”,所以在屏幕上显示“no”)
测试“string1”!=“string2”&&回声“是”|| 回声“不”
(因为“string1”不等于“string2”,所以对屏幕显示“yes”)
test -n“string1”&& echo“yes”|| 回声“不”
(对屏幕显示“yes”,因为“string1”的字符串长度大于零)
测试-z“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 - 文件存在且可执行
例子:
test / path / to / file1 -n / path / to / file2 && echo“yes”
(如果file1比file2更新,则会显示“是”一词)
test -e / path / to / file1 && echo“yes”
(如果file1存在,将显示“是”一词)
测试-O / path / to / file1 && echo“yes”
(如果您拥有file1,则显示“是”一词)“)
术语
- 特殊块 - 文件是块设备,这意味着数据以字节块读取。 这些通常是设备文件,例如硬盘。
- 字符特殊 - 文件在写入时立即执行,通常是串口等设备
比较多个条件
迄今为止,所有事情都是将一件事情与另一件事情进行比较,但如果你想比较两种情况呢。
例如,如果一只动物有4条腿并且走向“mo it”,它可能是一头母牛。 简单地检查4条腿并不能保证你有一头牛,但检查它确实会做的声音。
要一次测试两个条件,请使用以下语句:
test 4 -eq 4 -a“moo”=“moo”&& echo“it is a cow”|| 回声“它不是牛”
这里的关键部分是-a代表和。
有一个更好和更常用的方法来执行相同的测试,如下所示:
test 4 -eq 4 && test“moo”=“moo”&& echo“it is a cow”|| 回声“它不是牛”
你可能想要做的另一个测试是比较两个语句,如果两个语句都是真的,则输出一个字符串。 例如,如果您想检查名为“file1.txt”的文件是否存在,或者是否存在名为“file1.doc”的文件,则可以使用以下命令
test -e file1.txt -o -e file1.doc && echo“file1 exists”|| 回声“file1不存在”
这里的关键部分是代表“或”的-o。
有一个更好和更常用的方法来执行相同的测试,如下所示:
测试-e file1.txt || test -e file1.doc && echo“file1 exists”|| 回声“file1不存在”
消除测试关键字
您实际上不需要使用单词测试来执行比较。 你所要做的就是把这个陈述放在方括号中,如下所示:
[-e file1.txt] && echo“file1 exists”|| 回声“file1不存在”
[和]基本上意味着与测试相同。
现在你知道这一点,你可以改进比较多个条件如下:
[4 -eq 4] && [“moo”=“moo”] && echo“it is a cow”|| 回声“它不是牛”
[-e file1.txt] || [-e file1.doc] && echo“file1 exists”|| 回声“file1不存在”
概要
测试命令在脚本中更加有用,因为您可以测试一个变量与另一个变量的值并控制程序流。 在标准命令行上,您可以使用它来测试文件是否存在或