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


9469008-afdec819012c6580.png
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 蓝色
使用方式为
[root@oldboy-node101 ~]# echo -e "\E[1;31m我是红色 \E[0m"
我是红色
[root@oldboy-node101 ~]# echo -e "\E[1;32m我是绿色 \E[0m"
我是绿色
[root@oldboy-node101 ~]# echo -e "\E[1;33m我是黄色 \E[0m"
我是黄色
[root@oldboy-node101 ~]# 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
                                                               
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值