欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell编程 case语句

程序员文章站 2022-07-12 12:10:45
...

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结构语句的流程图如下所示:


shell编程 case语句
file

练习:
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