4

使用Shell脚本进行条件测试

 1 year ago
source link: https://blog.51cto.com/OSCP/5783744
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用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脚本进行条件测试_if语句

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

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

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

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

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

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

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

2)取值当用用户数量

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

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

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

3、逻辑判断使用

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

录有写入权限

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

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

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

4、整数比较运算符使用

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

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

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

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

5、字符串比较

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

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

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

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

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

1、if 单分支创建目录

1)创建脚本

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

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

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

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

1)创建脚本

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

2)执行脚本

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

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

1)创建 ping 测试脚本

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

2)验证脚本

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

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

1)创建网路连通性脚本

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

2)测试脚本

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

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

1)创建多分枝判断脚本

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

2)验证脚本

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

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

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

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK