当前位置:网站首页>Conditional Statements for Shell Programming
Conditional Statements for Shell Programming
2022-08-03 22:04:00 【....yc】
文章目录
ShellProgrammatic Conditional Statements
一、条件测试
1、文件测试
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作.例如,当磁盘使用率超过 95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等,Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为 0 时表示成功,否则(非 0 值)表示失败或异常.使用专门的测试工具——test 命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立)
test命令
测试表达式是否成立,若成立返回0,Otherwise return other values.
格式1:test 条件表达式
格式2:[ 条件表达式 ]
格式3:[[ 条件表达式 ]]
选项
-a:文件是否存在
-e:文件是否存在
-f:判断是否是普通文件
-d:判断是否是目录文件
-r:Determines whether the file is readable by the current user
-w:Determines whether the current user can write to the file
-x:Determine whether the current user can execute the file
-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 结尾
对一个变量的多种形态进行判断.
边栏推荐
猜你喜欢
随机推荐
CAS:1797415-74-7_TAMRA-Azide-PEG-Biotin
互联网用户账号信息管理规定今起施行:必须严打账号买卖灰产
【历史上的今天】8 月 3 日:微软研究院的创始人诞生;陌陌正式上线;苹果发布 Newton OS
StoneDB 开源社区月刊 | 202207期
pikachu Over permission 越权
E - Swap
C. awoo‘s Favorite Problem--Educational Codeforces Round 130 (Rated for Div. 2)
Pay from 0 to 1
6. XML
CAS:153162-70-0_N-BOC-6-Biotinamidohexylamine
用于流动质押和收益生成的 Web3 基础设施
472. Concatenated Words
466. Count The Repetitions
CAS:153162-70-0_N-BOC-6-生物素酰氨基己胺
嵌入式开发:嵌入式基础——代码和数据空间揭秘
21天打卡挑战学习MySQL—Day第一周 第一篇
480. Sliding Window Median
编译器工程师眼中的好代码(1):Loop Interchange
shell编程基础
XSS漏洞复现