Linux 的 test 命令是 Shell 内置命令,用于检测某个条件是否成立。test 常与 if 语句一起使用,且大多数 if 语句都依赖于 test。它可以将一个元素与另一个元素进行比较,但更常用于 BASH shell 脚本中,作为控制逻辑和程序流程的条件语句的一部分。
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”**:比较不符时运行的命令。
小贴士:从 shell 提示符运行,test*不会将值返回到标准输出,它仅返回退出状态代码。这就是为什么需要链接 echo 命令的原因。*

本质上一样的,该命令将 1 与 2 进行比较,如果它们匹配,则执行 echo“yes”语句并显示“yes”,如果它们不匹配,则执行 echo“no”语句,显示“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"
(在屏幕上显示“no”,因为 1 不等于 2)
test 1 -ge 2 && echo "yes" || echo "no"
(在屏幕上显示“no”,因为 1 不大于或等于 2)
test 1 -gt 2 && echo "yes" || echo "no"
(在屏幕上显示“no”,因为 1 不大于 2)

test 1 -le 2 && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为 1 小于或等于 2)
test 1 -lt 2 && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为 1 小于或等于 2)
test 1 -ne 2 && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为 1 不等于 2)

比较文本
比较解析为字符串的元素时,请使用以下比较运算符:
- **=**:字符串 1 匹配字符串 2
- != : 字符串 1 与字符串 2 不匹配
- -n:字符串长度大于0
- -z:字符串长度等于 0
例子
test "string1" = "string2" && echo "yes" || echo "no"
(在屏幕上显示“no”,因为“string1”不等于“string2”)
test "string1" != "string2" && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为“string1”不等于“string2”)
test -n "string1" && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为“string1”的字符串长度大于零)
test -z "string1" && echo "yes" || echo "no"
(在屏幕上显示“no”,因为“string1”的字符串长度大于零)

比较文件
比较文件时,请使用以下比较运算符:
- -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"

(如果 linuxmi 比 linux 新,则显示“yes”字样,如上图
⚡ test -e /home/linuxmi/linuxmi && echo "yes"

(如果 linuxmi 存在,将显示“yes”)
test -O /home/linuxmi/linuxmi && echo "yes"

(如果您拥有 file1,则显示“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 命令的分支很重要。如果第一个测试 (4 = 4) 失败,则 *test* 命令以非零退出代码终止。因此,我们跳转到双管道符号并且“it is not a cow”打印到标准输出。但是,如果第一个测试成功并因此 test 导致退出代码0,那么我们跳转到第一个双与号(&&)。下一条语句是另一个测试条件!
如果第二次 test 失败,我们再次跳到双管并从那里继续。然而,如果第二个 test 成功,我们跳转到第二个双& 语句,在这个例子中,它只是将“it is a cow”回显到标准输出,然后终止返回到 shell 提示符。
另一个测试比较两个语句,如果其中一个为真,则输出一个字符串。例如,要检查是否存在名为“linuxmi.txt”的文件或名为“linuxmi.py”的文件,可以使用以下命令:
这里的关键部分是**-o**代表or。
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 关键字
您实际上不需要使用单词test来执行比较。您所要做的就是将语句括在方括号中,如下所示:
⚡ [ -e linux.py ] && echo "linux.py exists" || echo "file1 does not exist"linux.py exists
[and**]基本上与****test含义 相同。**

现在您知道这一点,您可以改进比较多个条件,如下所示:
[ 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"

总结
test 命令在脚本中更有用,因为您可以对照另一个变量测试一个变量的值并控制程序流程。在命令行上,使用它来测试文件是否存在。
以上是如何在 Bash 脚本中使用强大的 Linux test 命令的详细内容。更多信息请关注PHP中文网其他相关文章!

Linux和Windows在硬件兼容性上不同:Windows有广泛的驱动程序支持,Linux依赖社区和厂商。解决Linux兼容性问题可通过手动编译驱动,如克隆RTL8188EU驱动仓库、编译和安装;Windows用户需管理驱动程序以优化性能。

Linux和Windows在虚拟化支持上的主要区别在于:1)Linux提供KVM和Xen,性能和灵活性突出,适合高定制环境;2)Windows通过Hyper-V支持虚拟化,界面友好,与Microsoft生态系统紧密集成,适合依赖Microsoft软件的企业。

Linux系统管理员的主要任务包括系统监控与性能调优、用户管理、软件包管理、安全管理与备份、故障排查与解决、性能优化与最佳实践。1.使用top、htop等工具监控系统性能,并进行调优。2.通过useradd等命令管理用户账户和权限。3.利用apt、yum管理软件包,确保系统更新和安全。4.配置防火墙、监控日志、进行数据备份以确保系统安全。5.通过日志分析和工具使用进行故障排查和解决。6.优化内核参数和应用配置,遵循最佳实践提升系统性能和稳定性。

学习Linux并不难。1.Linux是一个开源操作系统,基于Unix,广泛应用于服务器、嵌入式系统和个人电脑。2.理解文件系统和权限管理是关键,文件系统是层次化的,权限包括读、写和执行。3.包管理系统如apt和dnf使得软件管理方便。4.进程管理通过ps和top命令实现。5.从基本命令如mkdir、cd、touch和nano开始学习,再尝试高级用法如shell脚本和文本处理。6.常见错误如权限问题可以通过sudo和chmod解决。7.性能优化建议包括使用htop监控资源、清理不必要文件和使用sy

Linux管理员的平均年薪在美国为75,000至95,000美元,欧洲为40,000至60,000欧元。提升薪资可以通过:1.持续学习新技术,如云计算和容器技术;2.积累项目经验并建立Portfolio;3.建立职业网络,拓展人脉。

Linux的主要用途包括:1.服务器操作系统,2.嵌入式系统,3.桌面操作系统,4.开发和测试环境。Linux在这些领域表现出色,提供了稳定性、安全性和高效的开发工具。

互联网运行不依赖单一操作系统,但Linux在其中扮演重要角色。Linux广泛应用于服务器和网络设备,因其稳定性、安全性和可扩展性受欢迎。

Linux操作系统的核心是其命令行界面,通过命令行可以执行各种操作。1.文件和目录操作使用ls、cd、mkdir、rm等命令管理文件和目录。2.用户和权限管理通过useradd、passwd、chmod等命令确保系统安全和资源分配。3.进程管理使用ps、kill等命令监控和控制系统进程。4.网络操作包括ping、ifconfig、ssh等命令配置和管理网络连接。5.系统监控和维护通过top、df、du等命令了解系统运行状态和资源使用情况。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)