SHELL编程之条件测试

本文详细介绍了Shell脚本中的条件测试,包括test操作、字符串比较、整数值比较和文本状态测试。通过示例演示了如何判断字符串是否为空、数值大小、文件权限等,并讲解了如何使用控制操作符如';'、'&&'、'||'进行命令组合和多条件判断。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


提示:以下是本篇文章正文内容,下面案例可供参考

一、条件测试(1)

Shell脚本的智能化
如何使Shell脚本获得识别能力
为命令的执行提供最直接的识别依据
● 文件或目录的读/写等状态
比如说文件是否可读,文件是否可写等等状态做判断
根据判断的结构不一样,脚本处理的措施也不一样
● 数值的大小
比如说内存大于多少的时候,怎么处理
内存小于多少的时候,又怎么处理
● 字符串是否匹配
比如说当前用户的是root的时候,那么就可以执行某一条命令
如果当前用户不是root,那么可能就执行另外一条命令
● 多条件组合
比如说,既要判断文件的权限又要判断当前用户的用户名是不是root

1.test测试操作

● 语法格式
■ test 选项 参数
■ [ 选项 参数 ]
关于测试还可以使用help查看test的帮助
help test,查看test的帮助

2.字符串比较

● 基本语法
■ 是否为空[ -z 字符串 ]
判断某个字段是否为空使用-z选项
■ 等于[ 字符串1 == 字符串2 ]
判断两个字符串是否相等,使用的是 ==
■ 不等于[ 字符串1 != 字符串2 ]
判断两个字符串是否不相等,使用的是 !=
注意事项:在[之后必须要有空格,这个空格至少需要一个空格,多个也是可以的
比如是否为空 [空格-z空格字符串空格]
比如等于 [空格字符串1空格==空格字符串2空格]
比如不等于 [空格字符串1空格!=空格字符串2空格]

示例1:
我们在系统中并未定义aa,查看之下aa的值为空,这里是我们能看到的
如何让脚本更智能的盘判断aa为空,使用[ -z $aa ]
这时候我们是看不到结果的,如何知道这个判断是成功还是失败
用$?看到上一条命令执行的结果为0,那就是aa为空
然后给aa赋一个值aa=1,再去判断aa为空吗
这次答案就是非0 ,它部不为空
这是判断字符串是否为空
在这里插入图片描述

示例2:
调用一个系统的环境变量USER,就是当前系统用户的用户名
拿$USER与root常量进行比较
如果系统当前用户是root,则这个等于式条件为真
那么使用$?的时候,返回的结果就是0
同样的可以通过下面的语法判断$USER的值是不是等于一个普通用户hu
现在用户是root,所以root是不等于hu的
所以$?返回的结果是非0

在这里插入图片描述

3.整数值比较

除了可以对字串做比较外,shell脚本还可以进行数字的比较
● 基本语法
■ [ 整数值1 操作符 整数值2 ]

操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-ge大于或等于(Greater or Equal)
-le小于或等于(Less or Equal)
-gt大于(Greater Than)
-lt小于(Less Than)

注意事项:[空格整数值1空格操作符空格整数值2空格]

示例1:
使用两个常量做比较
首先是-eq(等于)和-ne(不等于)
在这里插入图片描述再来是-ge(大于或等于)和-le(小于或等于)
在这里插入图片描述
最后是-gt(大于)和-lt(小于)
在这里插入图片描述
案例二 :
在脚本实际编写过程中很少会用两个常量做比较
往往是拿一个变量和一个常量来对比
这个案例判断计算机登陆的用户有没有超过2个人
判断计算机登陆用户可以使用who命令
在这里插入图片描述

4.文本状态测试

● [ 操作符 文件或目录 ]

操作符含义
-e判断对象是否存在(Exist),若存在则结果为真
-d判断对象是否为目录(Directory),是则为真
-f判断对象是否为一般文件(File),是则为真
-r判断对象是否有可读(Read)权限,是则为真
-w判断对象是否有可写(Write)权限,是则为真
-x判断对象是否有可执行(eXcute)权限,是则为真

示例1:
使用-e测试/etc/这个目录是否存在
在这里插入图片描述
使用-d判断后面的对象是否为目录
在这里插入图片描述
使用-f判断测试对象是否存在且为文件
在这里插入图片描述
使用-r判断对象是否可读,-w是否可写,-x是否可执行
在这里插入图片描述
通过ll /etc/hosts可以看到该文件有可读可写权限,但没有可执行权限,使用命令进行判断后,返回值显示0或非0也判断对方只有可读可写没有可执行权限

小结:
在shell脚本中可以对各种情况做判断
● 对字符串判断“-z”代表判断字符串是否为空,“==”判断字符串是否相等,
“!=”判断字符串是否不相等
● 对数值判断“-eq”代表等于,“-ne”代表不等于,“-gt”代表大于,
“-ge”代表大于等于,“-lt”代表小于,“-le”代表小于等于
● 对文件和目录的判断“-e”仅判断它是否存在,只要存在就是对的
“-f”需要存在,且为一个文件,“-d”需要判断一个对象是否存在,并且是一个目录,“-r,-w,-x”分写代表着判断文件是否有可读,可写,可执行权限的

二、条件测试(2)

1.控制操作符

■ 组合多个命令
● 使用控制符组合多个命令
♦ “;” 使用分号将多条命令组合,则计算机就会按顺序执行第一条命令,接着执行第二条命令,第一条命令和第二条命令之间没有任何逻辑关系,计算机不关心前一条命令执行的成功与否,都会按顺序继续往下执行
♦ “&&” 使用&&将多条命令组合的时候,计算机还是按顺序去执行,但是多条命令之间是有逻辑关系的,仅当前一条命令执行成功的时候才会去执行后一条命令,前一条命令执行失败,&&后续的命令是不再执行的
♦ “||” 使用||将多条命令组合,||代表或者,如果||前面的命令执行成功了,那么||后面的命令不再执行,反之,如果||前面命令没有执行成功,则执行||后续的命令
● 多条件判断
♦使用&&、||进行多个条件的判断

语法格式

[ 判断1 ] && [ 判断2 ]

[ 判断1 ] || [ 判断2 ]

示例1:
在这里插入图片描述
根据示例1可以看到“;”分号下组合两个命令,无论第一个是否正常执行,都不影响继续执行第二个命令,无法执行的命令会报错

示例2:
在这里插入图片描述
根据示例2可以看到“&&”组合两个命令,如果第一个执行失败,就不会继续执行第二个命令

示例3:
在这里插入图片描述
根据示:3可以看到“||”组个两个命令,如果第一个命令执行成功则不会继续执行第二个命令,只有第一个命令执行失败,才会去执行第二个命令

示例4:
在这里插入图片描述
根据示例4可以看到,使用“&&”和“||”还可以将多个条件进行组合,这样就可以实现多组判断,比如[ a == a ] && [ 3 -gyt 2 ]前面一个判断a=a吗,后面一个判断是3大于2吗,中间使用&&连接。就是说只有前面一个成功了,并且后面一个命令成功了,整个判断才成功的,[ a == a ] || [ 3 -gyt 2 ]中间使用||分个则a=a或3大于2两个只要其中一个测试能成功,整个判断结果就是成功的

2.监控脚本

基础命令
● tr -s " "删除多余重复的字串
在这里插入图片描述
● cut过滤数据
cut -d以什么为分隔符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
监控脚本示例(待)


总结

● 命令的控制符操作
1.“;”分号分隔,使用“;”分号分隔计算机就会按顺序执行命令,前一条命令和后一条命令没有逻辑关系
2.“&&”分隔,使用“&&”分隔多条命令,计算机也是按顺序去执行,但仅当第一条命令执行成功的时候,才会执行后面的内容
3.“||”分隔,使用“||”分隔的时候,只有当前一个命令执行失败的时候才执行后续的命令
● 条件测试的应用案例
(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值