如何在 Bash 脚本中使用强大的 Linux test 命令
一个基本的例子
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
⚡ test 1 -eq 2 && echo "yes" || echo "no"
no
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com
⚡ test 1 -eq 1 && echo "yes" || echo "no"
yes
-
test:执行比较的命令 -
1:您要比较的第一个元素。在此示例中,它是数字1,但它可以是任何数字,也可以是引号内的字符串。 -
- eq:比较方法。在本例中,您正在测试一个值是否等于另一个值。 -
2:您要比较第一个元素的元素。在这个例子中,它是数字2。 -
&&:按顺序将命令链接在一起的 Linux 快捷方式。测试链的输出到随后的命令。当前面的命令的退出状态为 0 时,将执行双与号,这是表示命令没有失败的一种奇特方式。 -
echo "yes":比较成功时运行的命令。在这种情况下,我们所做的只是要求echo命令将单词“yes”打印到标准输出,但是如果测试结果证明为真,您可以在此处运行任何将执行的命令。 -
|| : 在某种程度上,与 &&; 正好相反 只有在它前面的命令失败(退出状态不是 0)时,双管道才会执行。 -
echo "no":比较不符时运行的命令。
比较数字
-
-eq:值 1 等于值 2 -
-ge : 值 1 大于或等于值 2 -
-gt : 值 1 大于值 2 -
-le : 值 1 小于或等于值 2 -
-lt : 值 1 小于值 2 -
-ne : 值 1 不等于值 2
示例测试
test 1 -eq 2 && echo "yes" || echo "no"
test 1 -ge 2 && echo "yes" || echo "no"
test 1 -gt 2 && echo "yes" || echo "no"
test 1 -le 2 && echo "yes" || echo "no"
test 1 -lt 2 && echo "yes" || echo "no"
test 1 -ne 2 && echo "yes" || echo "no"
比较文本
-
=:字符串 1 匹配字符串 2 -
!= : 字符串 1 与字符串 2 不匹配 -
-n:字符串长度大于0 -
-z:字符串长度等于 0
test "string1" = "string2" && echo "yes" || echo "no"
test "string1" != "string2" && echo "yes" || echo "no"
test -n "string1" && echo "yes" || echo "no"
test -z "string1" && echo "yes" || echo "no"
比较文件
-
-ef:文件具有相同的设备和 inode 编号(它们是同一个文件) -
-nt : 第一个文件比第二个文件新 -
-ot:第一个文件比第二个文件旧 -
-b:文件存在并且是块特殊的 -
-c:文件存在并且是字符特殊的 -
-d:文件存在并且是目录 -
-e : 文件存在 -
-f : 文件存在并且是普通文件 -
-g:文件存在并具有指定的组号 -
-G : 文件存在且属于用户组 -
-h或-L:文件存在并且是符号链接 -
-k:文件存在并且设置了粘性位 -
-O : 文件存在你是所有者 -
-p:文件存在并且是命名管道 -
-r:文件存在且可读 -
-s:文件存在且大小大于零 -
-S : 文件存在并且是一个socket -
-t :在终端上打开文件描述符 -
-u:文件存在并且设置了 set-user-id 位 -
-w:文件存在且可写 -
-x:文件存在且可执行
⚡ test linuxmi -nt linux && echo "yes"
⚡ test -e /home/linuxmi/linuxmi && echo "yes"
test -O /home/linuxmi/linuxmi && echo "yes"
比较多个条件
test 4 -eq 4 -a "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"
这里的关键部分是-a标志,它代表and。
test 4 -eq 4 && test "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"
test -e linuxmi.txt -o -e linuxmi.py && echo "linuxmi exists" || echo "linuxmi does not exist"
test -e linuxmi.txt || test -e linuxmi.py && echo "linuxmi exists" || echo "linuxmi does not exist"
排除 test 关键字
⚡ [ -e linux.py ] && echo "linux.py exists" || echo "file1 does not exist"
linux.py exists
[ 4 -eq 4 ] && [ "moo" = "moo" ] && echo "it is a cow" || echo "it is not a cow"
[ -e linuxmi.py ] || [ -e linuxmi.txt ] && echo "linuxmi exists" || echo "linuxmi does not exist"
总结
来自:Linux迷
链接:https://www.linuxmi.com/bash-linux-test-command.html
关注我们
长按或扫描下面的二维码关注 Linux公社
关注 Linux公社,添加“ 星标 ”
每天 获取 技术干货,让我们一起成长
合作联系: [email protected]