使用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


相关文章
|
18天前
|
弹性计算 Shell Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
102 1
|
21天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
16 0
|
28天前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
41 1
|
1天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
7 0
|
2天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
3天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
14 1
|
7天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
137 0
|
7天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
124 0
|
10天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
【4月更文挑战第9天】本文探讨了Python在自动化测试中的应用,强调其作为热门选择的原因。Python拥有丰富的测试框架(如unittest、pytest、nose)以支持自动化测试,简化测试用例的编写与维护。示例展示了使用unittest进行单元测试的基本步骤。此外,Python还适用于集成测试、系统测试等,提供模拟外部系统行为的工具。在脚本编写实践中,Python的灵活语法和强大库(如os、shutil、sqlite3、json)助力执行复杂测试任务。同时,Python支持并发、分布式执行及与Jenkins、Travis CI等持续集成工具的集成,提升测试效率和质量。
|
11天前
|
弹性计算 Shell Linux
ecs服务器shell常用脚本练习(六)
【4月更文挑战第4天】shell代码训练(六)
108 0