当前位置:网站首页>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 结尾
对一个变量的多种形态进行判断。
边栏推荐
猜你喜欢
随机推荐
IO thread process -> thread synchronization mutual exclusion mechanism -> day6
易基因:植物宏病毒组研究:植物病毒的进化与生态 | 顶刊综述
软件测试人员必备的60个测试工具清单,建议收藏一波~
Flutter 桌面探索 | 自定义可拖拽导航栏
AI首席架构师13-AICA-智能文档分析技术在行业场景中的应用
中国企业构建边缘计算解决方案的最佳实践
剑指 Offer 07. 重建二叉树
FVCOM 3D Numerical Simulation of Hydrodynamics, Water Exchange, Dispersion and Transport of Oil Spills丨FVCOM Model Watershed, Numerical Simulation Method of Marine Water Environment
A. Color the Picture- Codeforces Round #810 (Div. 1)
【历史上的今天】8 月 3 日:微软研究院的创始人诞生;陌陌正式上线;苹果发布 Newton OS
CAS:153162-70-0_N-BOC-6-生物素酰氨基己胺
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
HCIP第十三天
现网设备兼容SRv6网络演进
480. Sliding Window Median
XSS online shooting range---haozi
6. XML
2022年全国职业院校技能大赛网络安全 B模块 任务十windows操作系统渗透测试 国赛原题
如何设计 DAO 的 PoW 评判标准 并平衡不可能三角
东西向和南北向通信的统一









