shell编程 case语句
case语句
case结构条件句相当于多分支的if/elif/else条件句,但是它比这些条件句看起来更规范公正,常被用于实现系统服务启动脚本等企业应用场景中。
在case语句中,程序会将case获取的变量的值与表达式部分的值1、值2、值3等逐个进行比较,如果获取的变量值与某个值(例如值1)匹配,就会执行值(例如值1)的后面对应的指令(例如指令1,可能是一组指令),直到执行到双分号(;;)才停止,然后跳出case语句主体,执行case语句(即esac字符)后面的其他命令
如果没有找到匹配变量的任何值,则执行*)后面的指令(通常是给使用者的使用提示),直到遇到双分号(;;)或者esac结束,这部分相当于if多分支中最后的else语句部分。另外,case语句中的表达式对应值的部分,可以使用管道及通配符等更多功能匹配
case语法
case结构条件句的语法格式为:
case “变量” in
值1)
指令1...
;;
值2)
指令2...
;;
*)
指令3...
esac
如果case语句以中文形式描述,那么就是以下情况:
case “老男孩的各位” in
找到好工作)
给父母买买买
;;
天上掉金子)
给自己买买买
;;
天上掉金子)
给自己买买买
;;
天上掉女朋友)
给女朋友买买买
*)
还是老老实实学习吧!!
esac
case结构语句的流程图如下所示:
练习:
1、 编写脚本,使用单个字符进行传参,使用case判断是数字还是字母
2、 将” 打印菜单,按照选择项一键安装不同的web服务”脚本,将其中的条件表达式修改成case或if语句
3、 将Nginx服务管理脚本改为case方式+函数方式,并通过systemctl进行控制启动停止
4、 使用case选择水果,并打印水果名及其颜色
1.apple
2.pear
3.banana
4.blueberry
其中,颜色表达式分别为
31m 红色
32m 绿色
33m 黄色
34m 蓝色
使用方式为
[aaa@qq.com ~]# echo -e "\E[1;31m我是红色 \E[0m"
我是红色
[aaa@qq.com ~]# echo -e "\E[1;32m我是绿色 \E[0m"
我是绿色
[aaa@qq.com ~]# echo -e "\E[1;33m我是黄色 \E[0m"
我是黄色
[aaa@qq.com ~]# echo -e "\E[1;34m我是蓝色 \E[0m"
我是蓝色
1)打印菜单
2)使用read,显示一句话“选择你喜欢的水果”
3)使用case判断数字是【1|2|3|4】
4)如果都不符合,报错退出
解决:
1、 编写脚本,使用单个字符进行传参,使用case判断是数字还是字母
case "$1" in
[a-zA-Z])
echo '你输入的是字母'
;;
[0-9])
echo '你输入的是数字'
;;
*)
echo '输入有误'
esac
2、 将” 打印菜单,按照选择项一键安装不同的web服务”脚本,将其中的条件表达式修改成case或if语句
#定义脚本路径
lnmp=/server/scripts/lnmp.sh
lamp=/server/scripts/lamp.sh
#全局循环
while true;do
sleep 2
clear
#打印菜单
cat << EOF
1.[install lnmp]
2.[install lamp]
3.[exit]
EOF
#提示
read -p 'please input the num you want: ' mun
e_ifmenu.sh" 54L, 1009C
else
echo "$1 不存在"
exit
fi
}
# 检查输入的编号并执行对应的脚本
case "$mun" in
1)
check $lnmp
;;
2)
check $lamp
;;
3)
exit 1
;;
*)
echo 'Input Error'
esac
done
3.将Nginx服务管理脚本改为case方式+函数方式,并通过systemctl进行控制启动停止
#定义启动函数
function start(){
echo '正在启动'
nginxd
sleep 2
echo '启动成功'
}
#定义关闭函数
function stop(){
if [ `netstat -lntup|grep nginx|wc -l` -eq 0 ];then
echo 'nginx 没有启动'
else
echo '正在关闭'
nginxd -s stop
sleep 2
echo '关闭成功'
fi
}
#如果$1等于start 执行nginx启动
case "$1" in
start)
start
;;
#如果$1等于stop 执行nginx启动
stop)
stop
;;
#如果$1不等于start或stop,就打印提示
*)
echo 'Usage: /etc/init.d/nginx {start|stop|status|restart|force-reload}'
esac
4、 使用case选择水果,并打印水果名及其颜色
#打印水果菜单
function menu(){
cat << EOF
####################
# 1.apple #
# 2.pear #
# 3.banana #
# 4.blueberry #
####################
EOF
#打印提示
read -p "请输入你喜欢的水果对应的数字: " mun
case "$mun" in
1)
echo -e "\E[1;31mThe apple is red\E[0m"
;;
2)
echo -e "\E[1;32mThe pear is green \E[0m"
;;
3)
echo -e "\E[1;33mThe banana is yellow\E[0m"
;;
4)
echo -e "\E[1;34mThe blueberry is blue\E[0m"
;;
*)
echo '输入有误,请重新输入'
menu
esac
}
menu