Linux Bash Shell编程(九):流程控制语句(上) 分支语句(if、case)
Linux Bash Shell编程(九):流程控制语句(上) 分支语句(if、case) 上一节中,我们学习了Bash中各种类型的条件判断语句。在Bash中,流程控制是条件判断语句的最终目的,条件判断语句是流程设计的基础条件。本节开始我们就来一起探索Bash中的流程控制语句,首先我们会了解到分支语句if与caseif 判断语句 简介 流程控制是编程语言基础中的基础,if语句和case语句一起
上一节中,我们学习了Bash中各种类型的条件判断语句。在Bash中,流程控制是条件判断语句的最终目的,条件判断语句是流程设计的基础条件。本节开始我们就来一起探索Bash中的流程控制语句,首先我们会了解到分支语句
if
与case
if 判断语句
简介
流程控制是编程语言基础中的基础,
if
语句和case
语句一起实现了程序语言的三种结构(顺序结构、分支结构、循环结构)之一的分支结构。简单说,if
语句判断了条件的真假,定义了条件为真做什么(,为假做什么)。
语法
#单分支if语句
if [ 判断条件 ]; then
动作
fi
#或者
if [ 判断条件 ]
then
动作
fi
#多分支if语句
if [ 判断条件1 ]; then
动作1
elif [ 判断条件2 ]; then
动作2
elif [ 判断条件3 ]; then
动作3
...
else
动作n
fi
注意
-
小知识:在Shell脚本中使用
cd
命令仅对脚本内部有效,不影响外部环境 -
若要设定脚本的返回值,使用
exit
命令后跟返回值可完成
exit 0 #以0为返回值退出,默认
exit 1 #以1为返回值退出,一般为发生错误或中断
示例
示例1:利用(七)中所学字符串截取操作获取根目录文件系统占用率并在过高时报警
#以下是脚本df中内容
#!/bin/bash
#Author:Zheng
declare -i a
a=$(df | grep "/$" | awk '{print $5}' | cut -d "%" -f 1)
if [ $a -lt 80 ]; then #条件判断语句在后面内容中会讲到
echo "Storage space normal" #如果a小于80
else
echo "Warning:Not enough storage space" #如果a大于80
fi
echo -e "root storage used $a%"
示例2:应用多分支语句判断变量值的范围(仅作为多分支测试使用)
#!/bin/bash
#Author: Zheng
read -p "Input a: " a
if [ $a -lt 30 ]; then
echo "a<30"
elif [ $a -lt 80 ]; then
echo "30<=a<80"
else
echo "a>=80"
fi
case 判断语句
简介
同样作为分支顺序语句,case与if存在一定差别。case语句只能判断一种条件的不同关系,而if语句可以判断多种条件关系。但在一种条件的不同关系判断中,case语句更加简单,一般用于多项选择(仅适用于字符串匹配),支持通配符
基本语法
case $变量名 in
"值1") #变量值为值1
动作1
;;
"值2" | "值3") #变量值为值2或值3
动作2
;;
...
*)
其余所有值,执行动作n
;;
esac
注意
- 语句的结束标志是将头部关键字倒序
- 值可以是通配符,当值为通配符时,不可以加转义的
""
,否则将*
当作普通字符处理 - case条件支持正则表达式中的任意字符
[]
- 当两个条件为或时,可以用
|
连接,当两条件有一个成立时改条即成立
基本用法示例
#此示例读取一个成绩评级,并对各个评级作出回应
#!/bin/bash
#Author:Zheng
read -p "Please input your Grade(A\B\C\D):" -t 30 s
case $s in
A)
echo -e "Your grade is A!\nYou are excellent! Congratulations!"
;;
B | C)
echo -e "Good,\nplease keep it up!"
;;
D)
echo -e "You have failed this exam!\nStill have to work hard!"
;;
*)
echo -e "Grade error!\nPlease input A\\B\\C\\D"
esac
拓展用法
-
在基本用法中,如果变量符合一个条件,就会跳入执行对应动作,动作执行完毕直接跳出,而不会继续匹配剩余条件
-
使用
;&
代替;;
结束一个动作可以不跳出case语句,无论后面条件是否匹配,一律执行,直到出现;;
例如,这个示例中使用
;&
号,匹配到了第一个条件,但执行了两个echo
命令
#!/bin/bash
#Author:Zheng
t="AB"
case $t in
A*)
echo "A*"
;&
*A) #实际上没有匹配
echo "*B"
;&
esac
-
使用
;;&
符号可进行类case嵌套,在一个条件的结尾处使用;;&
,程序会转入下一层更精确的case语句中,内层的退出以及符号与正常相同#!/bin/bash #Author:Zheng read -p "Please input a number(<100): " a case $a in [7-10]*) echo "70+" ;;& ?5)echo "?5";& ?6)echo "?6";& ?7)echo "?7";& *)echo "?*";; [6-7]*) echo "60-70" ;;& ?5)echo "65";& ?6)echo "66";& *)echo "6*";; esac
索引
下一节,Linux Bash Shell编程(十):流程控制语句(下) 循环语句(for while until)我们将一起了解流程控制中的循环语句
更多推荐
所有评论(0)