使用Shell脚本进行条件测试

📒博客主页: ​​微笑的段嘉许博客主页​

🎉欢迎关注🔎点赞👍收藏⭐留言📝

📌本文由微笑的段嘉许原创!

📆51CTO首发时间:🌴2022年10月日21🌴

✉️坚持和努力一定能换来诗与远方!

🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

⭐本文介绍⭐

在简单的Shell程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程,然而,单一的顺序结构使得脚本过于机械化,不够"智能",难以处理更加灵活得系统任务。本文将学习如何进行条件测试,并通过正确使用if语句,使Shell脚本具有一定得"判断"能力,以根据不同得的条件来完成不同的管理任务。


📝理论讲解:

条件测试操作

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

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功否则(非0值)表示失败或异常。使用专门的测试工具——test命令,可以对特殊条件进行测试,并根据放回置来判断条件是否成立(返回值为0表示条件成立)。

使用test测试命令时,包括以下两种形式:

  • test 条件表达式
  • [ 条件表达式 ]

这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程的习惯需要注意的是,方括号"[" 或 "]"与条件表达式之间需要至少一个空格进行分隔。

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

文件测试

文件测试的是根据指定的路径名称,判断对应的是文件还是目录,或则判断文件是否可读、可写、可执行等。文件测试的常见操作选项如下,使用时将测试对象放在操作选项之后即可。

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

整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个与第二个数的关系,如是否大于等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项放在要比较的两个整数之间。

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

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

字符串比较

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

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

逻辑测试

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

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

在上述逻辑测试的操作选项中,"&&"和" || "通常也用于间隔不同的命令操作,其作用是相似的。实际上此前以及接触过"&&"操作的应用,如"make && make install"的编译安装操作。

if语句结构

在Shell脚本应用中,if语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果……那么……)。根据不同的复杂程度,if语句的选择结构可以分别为三种基本类型,适用于不同的应用场合。

单分支if语句

if语句的"分支" 指的是不同测试结果所对应的执行语句(一条或多条)。对于单分支的选择结构。只有在"条件成立"时才会执行相应的代码,否则不执行任何操作。单分支if语句的语法格式如下所示:

if 条件测试操作
then
命令序列
if

多分支if语句

由于if语句可以根据测试结果的成立,不成立分别执行操作,所以能够嵌套使用,进行多次判断。例如,首先判断某学生的得分是否及格,若及格则再次判断是否高于90分等。多分支if语句的语法格式如下:

if 条件测试操作1
then
命令序列1
elif 条件测试2
then
命令序列2
else
命令序列3
fi

📖实验配置与实现:

推荐步骤

条件测试逻辑判断应用

If 单分支、双分支和多分枝判断应用

实验步骤

一、条件测试逻辑判断应用

1、文件条件测试应用

1)测试目录是否存在结果为 0 存在结果非 0 不存在

使用Shell脚本进行条件测试_多分支

2)判断文件存在显示 yes,文件不存在非 0

使用Shell脚本进行条件测试_单分支_02

3)判断目录是否有写入权限,有写入权限显示 yes 没有写入权限为空

使用Shell脚本进行条件测试_if语句_03

2、整数值比较判断登录系统用户

1)设置 xshell 使用六个终端登录

使用Shell脚本进行条件测试_单分支_04

2)取值当用用户数量

使用Shell脚本进行条件测试_单分支_05

3)判断当超出 5 个给用户提醒

使用Shell脚本进行条件测试_单分支_06

3、逻辑判断使用

1)而且使用两个条件必须全部匹配显示提醒,判断/mnt 是否是目录,判断是否对/mnt 目

录有写入权限

使用Shell脚本进行条件测试_if语句_07

2)或使用两个条件匹配任意一个显示提醒

使用Shell脚本进行条件测试_shell脚本_08

4、整数比较运算符使用

1)取值系统的主版本号和次要版本

使用Shell脚本进行条件测试_单分支_09

2)配置逻辑判断两个结果为真显示符合安装条件

使用Shell脚本进行条件测试_shell脚本_10

5、字符串比较

1)判断系统是否支持中文

使用Shell脚本进行条件测试_shell脚本_11

2)根据用户输入字符串进行判断

使用Shell脚本进行条件测试_多分支_12

二、if 单分支、双分支、多分枝的应用

1、if 单分支创建目录

1)创建脚本

使用Shell脚本进行条件测试_shell脚本_13

2)添加执行权限执行脚本

使用Shell脚本进行条件测试_多分支_14

2、if 双份分枝判断是否有 benet 目录没有创建存在提示已经创建目录

1)创建脚本

使用Shell脚本进行条件测试_多分支_15

2)执行脚本

使用Shell脚本进行条件测试_单分支_16

3、if 双分支根据位置变量识别用户输入的 IP 地址判断连通信

1)创建 ping 测试脚本

使用Shell脚本进行条件测试_单分支_17

2)验证脚本

使用Shell脚本进行条件测试_单分支_18

4、if 双分支根变量赋值识别用户输入 IP 地址判断主机连通性

1)创建网路连通性脚本

使用Shell脚本进行条件测试_shell脚本_19

2)测试脚本

使用Shell脚本进行条件测试_条件测试_20

5、if 多分枝判断用户数据整数

1)创建多分枝判断脚本

使用Shell脚本进行条件测试_多分支_21

2)验证脚本

使用Shell脚本进行条件测试_shell脚本_22


🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

使用Shell脚本进行条件测试_单分支_23