makefile ifneq多个判断条件_Shell脚本应用——条件测试操作

Shell脚本应用——条件测试操作

前言:在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程,这就使得脚本过于机械化,不够"智能",难以处理更加灵活的系统任务。

下面让我们一起了解如何进行条件测试操作,并通过正确使用if语句,使shell脚本具有一定的"判断"能力,以根据不同的条件来完成不同的管理任务。

条件测试操作

要是shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%时,发送警告消息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等。

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。

常使用的测试方法使,有两种形式。如下图:

e4dbd94284defe1b21227bfb94bee87b.png

这两种方式的作用完全相同,但通常后一种形式更为常用(按照个人习惯吧)。需要注意的是,用方括号"[ ]"测试格式时,方括号"[ ]"左右与条件表达式之间需要至少一个空格进行分隔,否则会报错。

根据需要测试的条件类别不同,条件表达式也不同。常用的条件操作包括:文件测试、整数值比较、字符串比较、以及针对多个条件的逻辑测试。

1.文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。

常见的操作选项如下,使用时将测试对象放在操作选项之后即可。

  • -d:测试是否为目录(Directory)
  • -f:测试是否为文件(File)
  • -e:测试目录或文件是否存在(Exist)
  • -r:测试当前用户是否有读的权限(Read)
  • -w:测试当前用户是否有写入权限(Write)
  • -x:测试是否有可执行权限(Excute)

示例,如下图:

b33457a63d3744d1d42c02f86989be90.png

通过"$?"返回的值可以判断前一步的条件测试结果,但输出的结果也并不是很直观。为了可以更直观的查看测试结果,可以结合命令分隔符"&&"和echo命令一起使用,其中"&&"符号表示"而且"的关系,只有当前面的命令执行成功后才会执行后面的命令,否则后面的命令将会被忽略。如下图:

4c9e9fb1ee1992e6cc4ddc351c609360.png

2.数值比较

数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如第一个数是否大于、等于、小于第二个数。

整数值比较的常用操作选项如下,使用时将操作选项放在要比较的两个整数之间。

  • -eq:第一个数等于(Equal)第二个数
  • -ne:第一个数不等于(Not Equal)第二个数
  • -gt:第一个数大于(Greater Than)第二个数
  • -lt:第一个数小于(Lesser Than)第二个数
  • -le:第一个数小于等于(Lesser or Equal)第二个数
  • -ge:第一个数大于等于(Greater or Equal)第二个数

整数值比较在shell脚本编写中的应用较多。例如,用来判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本是否符合要求等。实际使用时,往往通过变量引用、命令替换等方式来获取一个数值。

示例:判断当前已登录的用户数,当超过五个时输出"Too many"。如下图:

9e53f86da86db2a85b39fbdacaf6cee0.png

示例:判断物理内存(Mem)当前的磁盘缓存(buff/cache)大小,当低于1024MB时输出具体数值。如下图:

8aedc55225b250e11b0c9ebf76ea0601.png

3.字符串比较

字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的shell脚本中,也可以用来判断用户输入的位置参数是否符合要求。

字符串比较的常用操作选项如下:

  • -z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串。
  • -n:测试变量的值不为空,与-z相反
  • =:第一个字符串与第二个字符串相同
  • !=:第一个字符串与第二个字符串不相同,其中"!"表示取反

示例:判断当前系统的语言环境,若不是"en.US"时输出提示信息"Not en.US"。如下图:

bc1614b9398144b99b5b01a3e85ee85a.png

示例:在脚本应用中,经常需要用户输入"yes或no"来确认某个任务。这时需要用到确认交互的过程,通过判断用户输入的内容来执行下一步操作。此示例只是其中一个简单的过程。如下图:

d5fc48e2001a79db5775646dccf2c377.png

关于read命令的用法可以点击查看Linux——Shell脚本中自定义变量的应用(基础)2

4.逻辑测试(与、或、非)

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要其中一个成立等情况,需要有一个测试的过程。

逻辑测试操作可分为表达式与表达式之间的逻辑、表达式内部逻辑两种,如下:

表达式之间逻辑:&&、||、!

表达式内部逻辑:-a、-o、!

  • &&(-a):逻辑与,表示"而且",只有当两个条件都成立时,整个测试命令的返回值才为0(结果成立)。
  • ||(-o):逻辑或,表示"或者",只要两个条件中有一个成立,整个测试命令的返回值就为0(结果成立)。
  • !:逻辑否,表示"不",只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)

在上述的逻辑测试的操作选项中,在实际应用中也用于间隔不同的命令操作,其作用也是相似的。如"make && make install"的编译安装操作。

示例:

96ef49ae3e117ba5a0bb942172dd549a.png

示例:通过ping百度来测试是否能上网。如下图:

6a5cca0ed4090c58f47d9b133cbd25f2.png

示例:测试/home目录下是否有"test1"目录,没有则创建它。如下图:

c189b7dd249a656e1275e00fd4b3d3bc.png

可以发现,执行"||"逻辑或时,执行命令的顺序为,先执行第一个命令,若第一个命令执行成功后,就不会再执行第二个命令,若第一个命令执行失败,才会执行第二个命令,依此往下执行,并不是把所有命令都执行一遍。而执行"&&"逻辑与时,只要第一个命令执行失败就不会执行下一个命令。

示例:判断当前Linux系统的内核版本是否大于3.4。如下图:

815ac08cbe0511cfe67ab10712cfa8af.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值