云计算技术教程之CASE分支语句

举报
tea_year 发表于 2024/08/22 23:47:14 2024/08/22
【摘要】 一、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

  1. 输入一个等级(A-E),查看每个等级的成绩;如:输入A,则显示“90分~100分”,依次类推

  2. 模拟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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。