目录
引言:我们在工作中需要掌握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
此处评论已关闭