shell脚本编程基础(三)

结构化命令(一)

if-then和case语句。
在这里插入图片描述在这里插入图片描述
If-then-else语句
在这里插入图片描述
当if语句中的命令返回非零退出状态码时, bash shell会执行else部分中的命令。
嵌套if-then语句的问题在于代码不易阅读,很难理清逻辑流程。
可以使用else部分的另一种形式:elif。这样就不用再书写多个if-then语句了。 elif使
用另一个if-then语句延续else部分。
在这里插入图片描述
elif语句行提供了另一个要测试的命令,这类似于原始的if语句行。如果elif后命令的退出状态码是0,则bash会执行第二个then语句部分的命令。使用这种嵌套方法,代码更清晰,逻辑更易懂。
在这里插入图片描述
elif语句返回的是非零值的退出状态。这使得elif块中的else代码块得以执行。

可以继续将多个elif语句串起来,形成一个大的if-then-elif嵌套组合。
在这里插入图片描述
每块命令都会根据命令是否会返回退出状态码0来执行。记住, bash shell会依次执行if语句,只有第一个返回退出状态码0的语句中的then部分会被执行。

可以使用test命令确定变量中是否有内容。这只需要一个简单的条件表达式。
在这里插入图片描述
当test命令测试条件时,返回的退出状态为0。这使得then语句块中的语句得以执行。
在这里插入图片描述
方括号定义了测试条件。无需在if-then语句中声明test命令。注意,第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。
在这里插入图片描述
在这里插入图片描述
这个脚本中只用了大于号,没有出现错误,但结果是错的。脚本把大于号解释成了输出重定
向。因此,它创建了一个名为hockey的文件。由于重定向的顺利完成, test命令返回了退出状态码0, if语句便以为所有命令都成功结束了。
要解决这个问题,就需要正确转义大于号。
在这里插入图片描述
比较测试中,大写字母被认为是小于小写字母的。sory命令相反,使用的是系统的本地化语言设置中定义的排序顺序。小写字母出现在大写字母前。
在这里插入图片描述
在这里插入图片描述
复合条件测试
if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用:
 [ condition1 ] && [ condition2 ] AND布尔运算符,要让then部分命令执行,两个条件都必须满足。
 [ condition1 ] || [ condition2 ] OR布尔运算符,任意条件为TRUE,then部分的命令就会执行。

双括号
在这里插入图片描述
expression可以是任意的数学赋值或比较表达式。除了test命令使用的标准数学运算符,
表12-4列出了双括号命令中会用到的其他运算符。
在这里插入图片描述
可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。
注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。

双方括号:提供了针对字符串比较的高级特性。
在这里插入图片描述
双方括号里的expression使用了test命令中采用的标准字符串比较。但它提供了test命令未提供的另一个特性——模式匹配( pattern matching)。

if [[ $USER == r* ]]
双等号将右边的字符串( r*)视为一个模式,并应用模式匹配规则。双方括号命令USER环境变量进行匹配,看它是否以字母r开头。如果是的话,比较通过, shell会执行then部分的命令。

有了case命令,就不需要再写出所有的elif语句来不停地检查同一个变量的值了。 case命令会采用列表格式来检查单个变量的多个值。
在这里插入图片描述

发布了35 篇原创文章 · 获赞 49 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_44710568/article/details/105072161