目录

1、条件测试

1.1、test 命令

1.2、文件测试

1.3、整数值比较

​1.4、字符串比较

1.5、逻辑测试

2、if语句的结构

2.1、单分支结构

​ 2.2、双分支结构

2.3、多分支结构

 3、case 语句结构

3.1、case多分支结构

3.2、case语句注意事项

case语句案例:

4、总结

引言:我们在工作中需要掌握shell 脚本条件测试,还有if 语句的编程,在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程!

1、条件测试

1.1、test 命令

测试表达式是否成立,若成立返回0,否则返回其他数值

1.2、文件测试

语法格式:

格式1:test 条件表达式

格式2:[ 条件表达式 ] #注意中括号和表达式中间需要隔一个空格

常用的测试操作符

-d 测试是否为目录
-e 测试目录或文件是否存在
-f 测试是否为文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行
-b 测试是否为设备文件
-c 测试是否为字符设备文件
-s 测试存在且文件大小为空
-L 测试是否为链接文件

格式1案例:

返回0表示条件成立,返回1表示条件不成立。

格式2案例:

&& :逻辑与,“而且”的意思

1.3、整数值比较

[ 整数1   操作符   整数2 ]

常见的测试操作符

-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于或等于
-ge 大于或等于

案例:当用户小于等于4个时,输出用户太少

案例:查看内存空间信息,内存不足时进行报警!

当内存空间大于等于100时,内存空间充足!

1.4、字符串比较

格式1  [ 字符串1 = 字符串2 ]

           [ 字符串1 != 字符串2 ]

格式2  [ -z 字符串 ]

常用的测试操作符 说明
= 字符串内容相同
!= 字符串内容不同,!号表示相反的意思
-z 字符串内容为空
-n 检查是否有字符串存在

1.5、逻辑测试

格式1:[ 表达式1 ] 操作符 [ 表达式2 ] .....

格式2:命令1  操作符  命令2....

常用的测试操作符

常用的测试操作符 说明
-a或&& “而且” 的意思
-o或|| 逻辑或,“或者”的意思
逻辑否

案例:测试/etc/passwd是否为文件且是否具有读取权限,都满足的话输出ok

&&、||操作符能够正常存在[[ ]]条件判断结构中,但是如果出现在一个[ ]结构中,就会报错

其中awk -F. ‘{print $1}’是以 . 来做分割的     uname  -r   查看内核版本信息

2、if语句的结构

2.1、单分支结构

if 语句的结构

单个括号([]):必须要有空格 两个字符或数字之间的比较左右必须有空格

条件判断:

test一种形式,[]中间只能使用=和!=比较字符串,如果使用< 、>需要进行转义\.

然后中间如果比较数字要用-lt 等符号,不能使用 \< 比较数字,他会当成字符串处理

两个括号 [ [ ] ]:可用于处理逻辑命令,也可以处理字符串是否相等,且使用< 、>不用转义符

案例:判断是否有这个目录,若不存在就自动创建

 2.2、双分支结构

双分支if语句的执行流程:首先判断条件测试操作的结果,如果条件成立,则执行then后面的命令序列1,忽略else及后面的命令序列2,直到遇见fi结束判断;如果条件不成立,则忽略then及后面的命令序列1,直接跳至else后面的命令序列2并执行,直到遇见fi结束判断

案例1:编写脚本判断主机是否存活

 

案例2:创建用户并自动创建用户密码,如果存在用户则提示已存在

2.3、多分支结构

多分支结构能够根据多个互斥的条件分别执行不同的操作,实际上等同于嵌套使用的if语句。

案例1:编写脚本(if嵌套语句)查看apache服务是否存在,不存在进行安装httpd服务,存在则输出服务已开启

 注意:等号两边同为字符串必须有空格,可以将==换成-a,两边同为变量值时要引号不要空格。

 执行脚本,服务开启中!

验证脚本删除httpd服务

执行脚本,httpd服务已自动安装

 案例2:编写脚本,判断文件的类型

 执行脚本。自动判断文件类型

 案例3:编写脚本,输入成绩查看相应处罚

执行脚本,输入相应的成绩

 3、case 语句结构

case 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写case 语句主要适用于以下情况: 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个 不同的条件,而 case 语句只是判断一个变量的不同取值。

3.1、case多分支结构

 case语句的执行流程
首先使用“变量值”与模式 1 进行比较,若取值相同则执行模式 1 后的命令序列,直到遇见双分号“;;”后跳转至 esac,表示结束分支;若与模式 1 不相匹配, 则继续与模式 2 进行比较,若取值相同则执行模式 2 后的命令序列,直到遇见双分号“;;”后 跳转至 esac,表示结束分支……依此类推,若找不到任何匹配的值,则执行默认模式“*)” 后的命令序列,直到遇见 esac 后结束分支。

3.2、case语句注意事项

case行首必须为单词“in”,每一模式必须以单个右括号")"结束

双分号";;"表示命令序列的结束

模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]",还可以用竖杠符号 “|”表示或,如“A|B”。

最后的*)表示默认模式,其中的*相当于通配符

case语句案例:

编写脚本,查看输出的字符类型

案例2:用case语句编写查看apache服务启动的脚本(交互式定义变量)

执行脚本,输入想要设置的httpd服务

4、总结

这篇文章主要讲述了文件测试、以及整数值比较,字符串比较以及逻辑测试,if的条件语句的语法分为单分支、双分支、多分支、一般嵌套if语句会经常用到,所以我们要熟练掌握并进行运用,同样我们还描述了case语句,以及case语句的一些简单脚本的使用方法及案例。

原文链接:https://blog.csdn.net/weixin_56270746/article/details/124425798

最后修改:2023 年 10 月 26 日
如果觉得我的文章对你有用,请随意赞赏