云计算技术教程之CASE分支语句
【摘要】 一、case语句case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相 匹配的命令。 case var in 定义变量;var代表是变量名 pattern 1) 模式1;用 | 分割多个模式,相当于or command1 需要执行的语句 ;; ...
一、case语句
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相 匹配的命令。
case var in 定义变量;var代表是变量名
pattern 1) 模式1;用 | 分割多个模式,相当于or
command1 需要执行的语句
;; 两个分号代表命令结束
pattern 2)
command2
;;
pattern 3)
command3
;;
*) default,不满足以上模式,默认执行*)下面的语句
command4
;;
esac esac表示case语句结束
案例1
-
当给程序传入start、stop、reload三个不同参数时分别执行相应命令。
#!/bin/bash
case $1 in
start|S)
echo "service is running...."
;;
stop|T)
echo "service is stoped..."
;;
reload|R)
echo "service is restart..."
;;
*)
echo "请输入你要的动作"
;;
esac
-
脚本提示让用户输入需要管理的服务名,然后提示用户需要对服务做什么操作,如启动,关闭,重启等
#!/bin/bash
read -p "请输入需要管理的服务名称(vsftpd):" service
case $service in
vsftpd)
read -p "请输入要操作的动作:" action
case $action in
start|S)
service vsftpd start
;;
stop|P)
service vsftpd stop
;;
reload|restart|R)
service vsftpd reload
;;
esac
;;
httpd)
echo "apache is running..."
;;
*)
echo "请输入需要管理的服务名称(vsftpd):"
;;
esac
案例2
模拟一个多任务维护界面。当执行程序时先显示总菜单,然后进行选择后做相应维护监控操作。
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
分析:
1. 打印菜单
2. 等待用户输入需要的操作编号 read case
echo "h 显示命令帮助"
...
cat <<EOF
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
EOF
#!/bin/bash
#打印菜单
cat <<-EOF
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
EOF
#让用户输入需要的操作
while true
do
read -p "请输入需要操作的选项[f|d]:" var1
case $var1 in
h)
cat <<-EOF
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
EOF
;;
f)
fdisk -l
;;
d)
df -h
;;
m)
free -m
;;
u)
uptime
;;
q)
exit
;;
esac
done
#!/bin/bash
#打印菜单
menu(){
cat <<-END
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
END
}
menu
while true
do
read -p "请输入你的操作[h for help]:" var1
case $var1 in
h)
menu
;;
f)
read -p "请输入你要查看的设备名字[/dev/sdb]:" var2
case $var2 in
/dev/sda)
fdisk -l /dev/sda
;;
/dev/sdb)
fdisk -l /dev/sdb
;;
esac
;;
d)
lsblk
;;
m)
free -m
;;
u)
uptime
;;
q)
exit
;;
esac
done
课堂练习1
-
输入一个等级(A-E),查看每个等级的成绩;如:输入A,则显示“90分~100分”,依次类推
-
模拟2人第一次相亲的场景,使用read让用户输入它的名字,性别,年龄(年龄放在性别判断后);在case里面再嵌套case菜单,使之选项更丰富。
要求: 1)
-
对性别进行判断,如果不输入男或者女,则显示”你是泰国来的吗?“
-
如果是男的,对其年龄进行判断。
2)
-
如果男的年龄大于等于18岁则显示“某某先生,你结婚了吗?”;
-
如果对方回答结了或者yes,则显示“结了你来这凑什么热闹”;
-
如果对方回答没有或者no,再次询问“那你有房有车吗?”;
-
如果既不说结了也不说没结则显示:“你到底结没结婚啊?”
-
如果回答有房有车,则显示”咱去民政局领证吧“;
-
如果回答没有,则显示“不好意思,我去下洗手间。”;
-
如果既不说有又不说没有,则显示“别浪费时间,请正面回答”。
-
如果男的年龄小于18岁,则显示“某某某你个小毛孩也来这凑热闹啦”
3)如果是女的,并且年龄大于等于18岁,则显示”某某女士你好“;否则显示”某某小姐你好“
参考:
#!/bin/bash
read -p "输入你的姓名:" name
read -p "输入你的性别:" gender
case "$gender" in
男|man|male|boy )
read -p "输入你的年龄:" age
if [ $age -ge 18 ];then
read -p "$name先生,你结婚了吗?" anwser
case "$anwser" in
结了|有|yes )
echo "结了你还来干嘛?"
;;
没结|没有|没|no )
read -p "有房有车吗?" anwser2
case "$anwser2" in
有)
echo "咱就直接去民政局领证吧"
;;
没有 )
echo "不好意思,我去下洗手间"
;;
* )
echo "别浪费时间,请正面回答"
esac
;;
* )
echo "你到底结没结?"
esac
else
echo "$name小子"
fi
;;
女|woman|female|girl|lady )
read -p "输入你的年龄:" age
if [ $age -ge 18 ];then
echo "$name女士"
else
echo "$name小姐"
fi
;;
* )
echo "你是泰国来的吗?"
esac
该程序有个bug:如果输入年龄为负数或者0也是可以的,如何修复bug?增加一个条件:如果输入的年龄小于等于10则显示:”不跟你玩了。。。“
在最后加入如下语句即可:
if [ $age -ge 18 ];then
echo "$name女士"
elif
[ $age -le 10 ];then
echo "不跟你玩了"
exit 1
else
echo "$name小姐"
fi
;;
* )
echo "你是泰国来的吗?"
esac
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)