当前位置:网站首页>Shell编程的条件语句
Shell编程的条件语句
2022-08-03 21:56:00 【....yc】
文章目录
Shell编程的条件语句
一、条件测试
1、文件测试
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过 95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等,Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为 0 时表示成功,否则(非 0 值)表示失败或异常。使用专门的测试工具——test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立)
test命令
测试表达式是否成立,若成立返回0,否则返回其它数值。
格式1:test 条件表达式
格式2:[ 条件表达式 ]
格式3:[[ 条件表达式 ]]
选项
-a:文件是否存在
-e:文件是否存在
-f:判断是否是普通文件
-d:判断是否是目录文件
-r:判断当前用户对文件是否可读
-w:判断当前用户对文件是否可写
-x:判断当前用户对文件是否可执行
-b:测试是否为字符设备文件
-c:测试是否为字符设备文件
-s:测试存在且文件大小为空
-L:测试是否为链接文件
2、整数测试
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项放在要 比较的两个整数之间。
常用测试操作符
-eq | (=)第一个数等于第二个数 |
---|---|
-ne | 第一个数不等于第二个数 |
-gt | (>)第一个数大于第二个数 |
-ge | (≥)第一个数大于或等于第二个数 |
-lt | (<)第一个数小于第二个数 |
-le | (≤)第一个数小于或等于第二个数 |
3、字符串比较
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。字符串比较的常用操作选项如下。
单个 括号([ ]) : 必须要有空格,两个字符或数字之间的比较左右必须有空格,
条件判断:test 一种形式,[ ] 中间只能使用 = 和 != 比较字符串,如果使用 < 、 > 需要加转义字符 “ \ ” 。
两个括号 ( [[ ]]) : 可以用于处理逻辑命令,也可以处理字符串是否相等,且使用 < 、> 不需要转义字符 “ \ ”。
字符串比较通常来检查用户输入,系统环境等是否满足条件,在提供交互式操作的shell脚本中,也可用来判断用户输入的位置参数是否符合要求。
常用选项
选项 | 功能 |
---|---|
= | 第一个字符串 和 第二个字符串相同 |
!= | 第一个字符串与第二个字符串不相同,其中“ !”符号表示取反 |
-z | 检查字符串是否为空(zero),对于未定义或赋予控制的变量将视为空串 |
空格 都为空字符
4、逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。
常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间。
二、if语句
脚本错误的几种方式
1.命令错误 不会影响接下来的操作 运行前一定要测试后再进行 (脚本一旦运行风险很大,要测试)
2.格式错误 会影响接下来的操作 bash -x 跟踪每一行脚本的命令
3.逻辑错误 需要自己排查逻辑
实际上使用“&&”和“||”逻辑测试已经可以完成简单的判断并执行相应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解。而使用专用的 if 条件语句,可以更好地整理脚本结构,使得层次分明, 清晰易懂
1、if单分支语句
对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
语法格式①
if 条件测试操作
then
命令序列
fi #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误
语法格式②
if 条件测试操作;then
命令序列
fi
2、if双分支语句
双分支if语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作
3、if多分支语句
与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作
4、嵌套if语句
嵌套语句就是在if语句中再有一个if语句,直到最后的判定达到要求,就像一课树一样,达到最枝丫的地方
三、case分支语句
1、case语句说明
ase 语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case 语句主要适用于以下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个变量的不同取值
2、case语句的格式
ase 行尾必须为单词“in”,每一模式必须以**右括号“)”结束**。 双分号“;;”表示命令序列的结束。 模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号 “|”表示或,如“A|B”。 最后的“)”表示默认模式,其中的相当于通配符。
总结
条件测试(test)
文件测试:-d、-f、-e、-r、-w、-x
整数测试:-eq、-ne、-gt、-ge、lt、le
字符串比较:= 、!=、 -z
逻辑测试:&&(-a)、||(-o)、!
if语句
if开头进行判断,then执行判断成功的语句,else执行判断失败的语句,fi结尾
case语句
case 变量 in
esac 结尾
对一个变量的多种形态进行判断。
、-gt、-ge、lt、le
字符串比较:= 、!=、 -z
逻辑测试:&&(-a)、||(-o)、!
if语句
if开头进行判断,then执行判断成功的语句,else执行判断失败的语句,fi结尾
case语句
case 变量 in
esac 结尾
对一个变量的多种形态进行判断。
边栏推荐
猜你喜欢
剑指 Offer 07. 重建二叉树
YOLO之父宣布退出CV界,坦言无法忽视自己工作带来的负面影响
距LiveVideoStackCon 2022 上海站开幕还有3天!
XSS online shooting range---haozi
现网设备兼容SRv6网络演进
Linux操作Jmeter(附带:关于连接上redis无法进行写入操作的问题),JMeter配置多用户进行压力测试
服务器安装redis
三年黑盒测试工程师对嵌入式软件测试的理解
XSS holes emersion
IO thread process -> thread synchronization mutual exclusion mechanism -> day6
随机推荐
聚焦开源与联合共创|麒麟软件出席开源峰会欧拉分论坛
HCIP第十六天
数据一致性:双删为什么要延时?
嵌入式系统:GPIO
《强化学习周刊》第56期:GraphIRL、REDEEMER & 眼科强化学习的潜在研究
C. Fishingprince Plays With Array--Codeforces Global Round 21
投资性大于游戏性 NFT游戏到底是不是门好生意
HCIP第十四天
21天打卡挑战学习MySQL——《Window下安装MySql》第一周 第三篇
Security Fundamentals 8 --- XSS
模板字符串
【云原生实用技巧】使用 skopeo 批量同步 helm chart 依赖镜像
软考系统分析师备考经验分享:论持久战
XSS online shooting range---prompt
安全基础8 ---XSS
CAS:1260586-88-6_生物素-C5-叠氮_Biotin-C5-Azide
CAS:122567-66-2_DSPE-生物素_DSPE-Biotin
4. 模块化编程
剑指 Offer 07. 重建二叉树
CAS:1797415-74-7_TAMRA-Azide-PEG-Biotin