乐趣区

Shell脚本应用条件测试操作

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

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

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

条件测试操作

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

Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为 0 时表示成功,否则(非 0 值)表示失败或异常。
这两种方式的作用完全相同,但通常后一种形式更为常用(按照个人习惯吧)。需要注意的是,用方括号“[]”测试格式时,方括号“[]”左右与条件表达式之间需要至少一个空格进行分隔,否则会报错。

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

1. 文件测试

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

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

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

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

2. 数值比较

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

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

-eq:第一个数等于(Equal)第二个数 -ne:第一个数不等于(Not Equal)第二个数 -gt:第一个数大于(Greater Than)第二个数 -lt:第一个数小于(Lesser Than)第二个数 -le:第一个数小于等于(Lesser or Equal)第二个数 -ge:第一个数大于等于(Greater or Equal)第二个数整数值比较在 shell 脚本编写中的应用较多。例如,用来判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本是否符合要求等。实际使用时,往往通过变量引用、命令替换等方式来获取一个数值。

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

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

3. 字符串比较

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

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

-z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串。-n:测试变量的值不为空,与 - z 相反 =:第一个字符串与第二个字符串相同!=:第一个字符串与第二个字符串不相同,其中“!”表示取反示例:判断当前系统的语言环境,若不是“en.US”时输出提示信息“Not en.US”。如下图:

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

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

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

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

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

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

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

&&(-a):逻辑与,表示“而且”,只有当两个条件都成立时,整个测试命令的返回值才为 0(结果成立)。||(-o):逻辑或,表示“或者”,只要两个条件中有一个成立,整个测试命令的返回值就为 0(结果成立)。!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)在上述的逻辑测试的操作选项中,在实际应用中也用于间隔不同的命令操作,其作用也是相似的。如“make && make install”的编译安装操作。

退出移动版