• 自动秒收录
  • 软件:1973
  • 资讯:56215|
  • 收录网站:181187|

IT精英团

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

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

浏览次数:
评论次数:
编辑: 乐咏
信息来源: ITPUB
更新日期: 2022-05-20 21:39:09
摘要

Linuxtest命令是Shell内置命令,用来检测某个条件是否成立。test通常和if语句一起使用,并且大部分if语句都依赖test。可以将一个元素与另一个元素进行比较,但它更常

  • 正文开始
  • 相关阅读
  • 推荐作品

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

test命令中有很多选项,可以用来检测值、字符串和文件。

一个基本例子

在终端窗口中尝试这些命令。

Linux mi @ Linux mi/home/Linux mi/www . Linux mi.com

test1-eq2回显“是”| |回显“否”

Linux mi @ Linux mi/home/Linux mi/www . Linux mi.com

test1-eq1echo'yes'||echo'no '

上面的命令分解如下:

测试:执行比较的命令。

1:要比较的第一个元素。在本例中,它是数字1,但也可以是任何数字或引号中的字符串。

情商:比较法。在本例中,您将测试一个值是否等于另一个值。

2:你要比较第一个元素的元素。在本例中,它是数字2。

:将命令按顺序链接在一起的Linux快捷方式。测试链对后续命令的输出。当前一个命令的退出状态为0时,将执行双and符号,这是一种特殊的方式来显示命令没有失败。

Echo 'yes ':比较成功时运行的命令。在这种情况下,我们所做的只是要求echo命令将单词“yes”打印到标准输出中,但是如果测试结果证明是真的,您可以运行将在这里执行的任何命令。

||| 3360某种程度上,用;相反,只有在前一条命令失败时(退出状态不为0),才会执行双流水线。

Echo 'no ':比较不匹配时要运行的命令。

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

A8CF2743454C.jpg" width="928" src="https://image.z.itpub.net/zitpub.net/JPG/2022-05-20/AD2C6E56F1A53A2786E6A8CF2743454C.jpg">

本质上一样的,该命令将 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 命令在脚本中更有用,因为您可以对照另一个变量测试一个变量的值并控制程序流程。在命令行上,使用它来测试文件是否存在。

标签:文件 命令 存在
真正的建筑设计是什么样子的?
« 上一篇 2022-05-20
前端面试必须解决网络中的跨域问题
下一篇 » 2022-05-20
  • 胡迪核心知识点详解(好文章合集)
    1阅读 0条评论 个赞
    以下文章来源于公众号-3分钟秒懂大数据,作者在IT中穿梭旅行在Flink实时流中,经常会通过FlinkCDC插件读取Mysql数据,然后写入Hudi中。所以在执行上述操作时,需要了解……
  • 前端面试必须解决网络中的跨域问题
    0阅读 0条评论 个赞
    什么是跨域浏览器有一个重要的安全策略,称之为「同源策略」其中,源=协议+主机+端口源=协议+主机+端口源=协议+主机+端口,两个源相同,称之为同源,两个源不同,称之为跨源或跨域比如:源1源2是否同……
  • 真正的建筑设计是什么样子的?
    1阅读 0条评论 个赞
    什么是架构和架构本质在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的……
  • 10分钟了解云原生 值得收藏~
    0阅读 0条评论 个赞
    文章转载:奇妙的Linux世界我们已经进入云计算下半场,不再像上半场在纠结要不要上云,而是讨论怎么上云?才能把云计算的价值发挥到淋漓尽致。如何把云计算与不同的业务场景深度结合?如何让技术真正作用于企业……
  • 你可能不知道PostgreSQL能做的8件有趣的事!
    0阅读 0条评论 个赞
    1整行引用您是否尝试过运行以下语句?SELECTmy_tableFROMmy_table;这可能看起来很奇怪,但它所做的是将所有列作为行类型返回到单个列中。现在你为什么要这样做?好吧,您很可……
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
  • Spring Boot的表现太差了 我教你几招轻松搞定
    0阅读 0条评论 个赞
    文章……
  • 码头工人搭建弹性搜索集群教程
    1阅读 0条评论 个赞
    写在前面:为什么要用ElasticSearch?我们的应用经常需要添加检索功能,开源的ElasticSearch是目前全文检索引擎的首选。它可以快速的存储、搜索和分析海量数据。ElasticSear……
  • 透彻理解数据资产、数据资源、数据管理、数据治理等概念的区别
    1阅读 0条评论 个赞
    以下文章来源于公众号-大鱼的数据人生,作者讨厌的大鱼先生数据成为生产要素后,各种跟数据相关的概念就出来了,其实很多概念没有权威定义,大家各有各的理解,这导致了理解上的歧义。数据管理、数据治理、数据资源……
  • PostgreSQL并行框架分析
    3阅读 0条评论 个赞
    作者简介施博文,目前就职于腾讯云PG团队概览PostgreSQL并行框架提供了一系列方便的函数,支持在插件或内核中直接调用相关函数,启动若干个后台进程进行并行操作。目前,PG的并行框架主要用来……
  • 前端面试必须解决网络中的跨域问题
    0阅读 0条评论 个赞
    什么是跨域浏览器有一个重要的安全策略,称之为「同源策略」其中,源=协议+主机+端口源=协议+主机+端口源=协议+主机+端口,两个源相同,称之为同源,两个源不同,称之为跨源或跨域比如:源1源2是否同……
  • 说说春云的全链路灰度发布方案~
    1阅读 0条评论 个赞
    以下文章来源于公众号-码猿技术专栏,作者不才陈某大家好实际生产中如有需求变更,并不会直接更新线上服务,最通常的做法便是:切出线上的小部分流量进行体验测试,经过测试后无问题则全面的上线。这样做的好处也是……
  • MYSQL如果索引优化仅仅是添加索引 太年轻而不简单
    1阅读 0条评论 个赞
    MYSQL的索引优化,如果此时此刻看到索引的优化,仅仅想到添加适合的索引,是不完全的,索引的优化本身就具有很多的不确定性。1索引会随着时间的推移,有性能的衰减2索引会随着数据量的增加,有性能的衰……
  • 甲骨文(第11代)单实例-室内空调(第11代)迁移模拟测试
    1阅读 0条评论 个赞
    Oracle11.2.0.4单实例----Oracle19C-RAC迁移模拟测试总体思想:通过RMAN物理备份在备库恢复主库数据,后续通过在主库停业务后,将从备份后的所有日志都同步到新库应用,重新配置……
  • 采访者:告诉我们SpringAOP的底层代理模型
    2阅读 0条评论 个赞
    来源|Java技术指北(ID:javanorth)代理模式相信大家经常听说,在设计模式中相对而言是比较难理解的。这次指北君来给大家通俗的介绍介绍。1、什么是代理模式Provideasurrog……
  • Linux中的交互式进程查看命令htop
    1阅读 0条评论 个赞
    htop界面展示HtopLinux进程监控工具“Htop是一个用于Linux/类Unix系统的交互式实时进程监控应用程序,也是top命的替代品,它是所有Linux操作系统上预装的默……
  • Linux的10个最危险的命令
    0阅读 0条评论 个赞
    rm-rf命令该命令可能导致不可恢复的系统崩坏。>rm-rf/#强制删除根目录下所有东西。>rm-rf*#强制删除当前目录的所有文件。>rm-rf.#强制删除当前文件夹及其子文件夹。执行rm-r……
  • 数据治理 区分系统、机制、流程的概念很重要
    0阅读 0条评论 个赞
    以下文章来源于公众号-大鱼的数据人生,作者讨厌的大鱼先生我们刚接触数据的时候,从事的大多是具体的数据管理活动,无论是数据的采集、开发和开放,或是元数据管理、数据质量管理或是数据安全管理等等,但当你想更……
  • 纳尼?数据也是立法的吗?
    1阅读 0条评论 个赞
    编辑:彭文华来源:大数据架构师(ID:bigdata_arch)彭友们好,我是老彭。最近忙疯了,天天给客户写方案,都没时间写文章了。趁着五一假期,跟彭友们唠唠新鲜事儿。今天这个,真的是颠覆我的认知,……
  • 运维数字化转型的几点思考
    1阅读 0条评论 个赞
    这个月底要召开一个企业运维数字化转型的研讨会,昨天一个合作伙伴和我讨论一些研讨会的话题问题。数字化转型是近期十分热门的话题,各大国企央企也把数字化转型作为未来几年的工作重点。不过针对于IT运维,数字化……
  • 记得网上一个K8s Ingress访问故障排除 最后却不是帖子的锅
    1阅读 0条评论 个赞
    具体现象应用迁移至我们的PaaS平台后会出现偶发性的502问题,错误见图片:相比于程序的请求量,错误肯定是比较少的,但是错误一直在发生,会影响调用方的代码,需要检查下问题原因。为啥我们只看到了POST……
  • MYSQL VS POLARDB唯一索引死锁及应用设计
    1阅读 0条评论 个赞
    #issue68021MySQLuniquecheck问题-知乎(zhihu.com)事情的开始是这样的,最近和阿里云密切联系,也成为他们的大客户,(我们当然是大客户,BIGBIG……
  • 如何执行超过100M的SQL脚本?
    2阅读 0条评论 个赞
    技术_菜鸟https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一个问题,在SQLServer的查询分析器里面执行一个超过100MB的数据库脚本,发现……
  • 服务器端高并发分布式架构的演进之路
    1阅读 0条评论 个赞
    1.概述本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程。同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知。文章最后汇总了一些架构设计的原则。特别说……
  • 7 种提升Spring Boot吞吐量神技!
    0阅读 0条评论 个赞
    一、异步执行实现方式二种:1.使用异步注解@aysnc、启动类:添加@EnableAsync注解2.JDK8本身有一个非常好用的Future类——CompletableFuture@AllArg……
  • 在Linux中检查磁盘空间的12个有用的df命令
    1阅读 0条评论 个赞
    1.检查文件系统磁盘空间使用情况这df命令显示文件系统上的设备名称、总块数、总磁盘空间、已用磁盘空间、可用磁盘空间和挂载点信息。[root@local~]#dfFilesystem1K-bloc……
最近发布资讯
更多