使用Shell脚本进行条件测试

简介: ⭐本文介绍⭐在简单的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 不存在


1.jpg


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


2.jpg


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


3.jpg


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


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


4.jpg


2)取值当用用户数量


5.jpg


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


6.jpg


3、逻辑判断使用


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


录有写入权限


7.jpg


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


8.jpg


4、整数比较运算符使用


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


9.jpg


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


10.jpg


5、字符串比较


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


11.jpg


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

12.jpg



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


1、if 单分支创建目录


1)创建脚本


13.jpg


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


14.jpg


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


1)创建脚本


15.jpg


2)执行脚本


16.jpg


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


1)创建 ping 测试脚本


17.jpg


2)验证脚本


18.jpg


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


1)创建网路连通性脚本


19.jpg


2)测试脚本


20.jpg


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


1)创建多分枝判断脚本


21.jpg


2)验证脚本


22.jpg


相关文章
|
10天前
|
测试技术 数据库
自动化测试的救赎:揭秘代码复用的艺术,让测试脚本涅槃重生!
【8月更文挑战第21天】自动化测试对提升软件质量和开发效率至关重要,但其维护成本随项目规模增长而上升。采用代码复用策略能显著减轻这一负担。本文概述了自动化测试中实现代码复用的方法,包括抽象与封装、模块化、参数化、继承及利用测试框架等,以减少重复劳动、提高代码质量与开发速度,并简化维护流程。掌握这些策略将助力构建高效、可维护的自动化测试体系。
31 5
|
9天前
|
XML Web App开发 数据挖掘
Postman接口测试工具全解析:功能、脚本编写及优缺点探讨
文章详细分析了Postman接口测试工具的功能、脚本编写、使用场景以及优缺点,强调了其在接口自动化测试中的强大能力,同时指出了其在性能分析方面的不足,并建议根据项目需求和个人偏好选择合适的接口测试工具。
15 1
|
10天前
|
Ubuntu Linux Shell
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
|
9天前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
14 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
10天前
|
监控 Shell Linux
在Linux中,如何使用shell脚本进行系统监控和报告?
在Linux中,如何使用shell脚本进行系统监控和报告?
|
10天前
|
Shell Linux
在Linux中,shell脚本中的条件语句和循环结构是什么?
在Linux中,shell脚本中的条件语句和循环结构是什么?
|
11天前
|
关系型数据库 MySQL Shell
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
|
14天前
|
监控 关系型数据库 MySQL
优秀的网络工程师,早就偷偷收藏了这9 个实用 Shell 脚本!
优秀的网络工程师,早就偷偷收藏了这9 个实用 Shell 脚本!
|
24天前
|
存储 Shell 应用服务中间件
[ansible]wget批量调用shell脚本
[ansible]wget批量调用shell脚本
|
24天前
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
下一篇
云函数