搜索
首页系统教程LINUX如何在 Bash 脚本中使用强大的 Linux test 命令

如何在 Bash 脚本中使用强大的 Linux test 命令

Feb 09, 2024 pm 04:40 PM
linuxlinux教程linux系统linux命令外壳脚本linux入门linux学习

Linux 的 test 命令是 Shell 内置命令,用于检测某个条件是否成立。test 常与 if 语句一起使用,且大多数 if 语句都依赖于 test。它可以将一个元素与另一个元素进行比较,但更常用于 BASH shell 脚本中,作为控制逻辑和程序流程的条件语句的一部分。

test 命令有许多选项,可以进行数值、字符串和文件三方面的检测。

如何在 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”**:比较不符时运行的命令。

小贴士:从 shell 提示符运行,test*不会将值返回到标准输出,它仅返回退出状态代码。这就是为什么需要链接 echo 命令的原因。*

如何在 Bash 脚本中使用强大的 Linux test 命令

本质上一样的,该命令将 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)

如何在 Bash 脚本中使用强大的 Linux test 命令
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)

如何在 Bash 脚本中使用强大的 Linux test 命令

比较文本

比较解析为字符串的元素时,请使用以下比较运算符:

  • **=**:字符串 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”的字符串长度大于零)

如何在 Bash 脚本中使用强大的 Linux test 命令

比较文件

比较文件时,请使用以下比较运算符:

  • -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"
如何在 Bash 脚本中使用强大的 Linux test 命令

(如果 linuxmi 比 linux 新,则显示“yes”字样,如上图

⚡ test -e /home/linuxmi/linuxmi && echo "yes"
如何在 Bash 脚本中使用强大的 Linux test 命令

(如果 linuxmi 存在,将显示“yes”)

test -O /home/linuxmi/linuxmi && echo "yes"
如何在 Bash 脚本中使用强大的 Linux test 命令

(如果您拥有 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含义 相同。**

如何在 Bash 脚本中使用强大的 Linux 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"
如何在 Bash 脚本中使用强大的 Linux test 命令

总结

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

以上是如何在 Bash 脚本中使用强大的 Linux test 命令的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:良许Linux教程网。如有侵权,请联系admin@php.cn删除
Linux和Windows之间的硬件兼容性有何不同?Linux和Windows之间的硬件兼容性有何不同?Apr 23, 2025 am 12:15 AM

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

Linux和Windows之间虚拟化支持有哪些差异?Linux和Windows之间虚拟化支持有哪些差异?Apr 22, 2025 pm 06:09 PM

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

Linux系统管理员的主要任务是什么?Linux系统管理员的主要任务是什么?Apr 19, 2025 am 12:23 AM

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

很难学习Linux吗?很难学习Linux吗?Apr 18, 2025 am 12:23 AM

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

Linux管理员的薪水是多少?Linux管理员的薪水是多少?Apr 17, 2025 am 12:24 AM

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

Linux的主要目的是什么?Linux的主要目的是什么?Apr 16, 2025 am 12:19 AM

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

互联网在Linux上运行吗?互联网在Linux上运行吗?Apr 14, 2025 am 12:03 AM

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

Linux操作是什么?Linux操作是什么?Apr 13, 2025 am 12:20 AM

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

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)