加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

【Linux】shell脚本实战-流程控制语句case

发布时间:2022-10-21 12:47:33 所属栏目:Linux 来源:
导读:  【Linux】shell脚本实战-流程控制语句case

  前言

  前面我们探讨过shell脚本中的if语句,单分支,双分支以及多分支的写法,今天我来看另一个流程控制语句case。

  什么是case语句

  控
  【Linux】shell脚本实战-流程控制语句case
 
  前言
 
  前面我们探讨过shell脚本中的if语句,单分支,双分支以及多分支的写法,今天我来看另一个流程控制语句case。
 
  什么是case语句
 
  控制语句:用来实现对程序流程的选择、循环、转向和返回等进行控制; case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。
 
  case语句适合用于多分支,多选择的情况,是一个多选选择语句。
 
  case语句语法分析
 
  case 变量名 in
    值1)
      指令1
      ;;
    值2)
      指令2
      ;;
    值3)
      指令3
      ;;
      *)
      指令3
      ;;
  esac
  中文范例,我们喜欢用中文例子来看编程:
 
  case “各位” in
  找到好工作)
      给父母买买买
      ;;
  天上掉金子)
      给自己买买买
      ;;
  天上掉女朋友)
      给女朋友买买买
  *)
      还是老老实实学习吧!!
  esac
  case语句的语法规范**
 
  注意: 变量或者表达式后面的单词必须为in, 每个表达式或变量的值必须以右括号结束。
 
  case实战案例1. 做出你的选择
 
  #!/bin/bash
  read -p "Please choose yes/no: " cho
  ## 通过输入来确定变量
  case $cho in
      yes)
          echo "Your choose is yes!"   ### 如果你选择yes,就输出你的选择是正确的
          ;;  ## 所有结束的地方都是两个分号
      no)
          echo "Your choose is no!"
          ;;
      *)      ### 其他选项用*来表示
          echo "Your choose is error!"
          ;;
  esac
  返回执行结果:
 
  [root@ecs-c13b ~]# bash case1.sh
  Please choose yes/no: yes
  Your choose is yes!
  [root@ecs-c13b ~]# bash case1.sh
  Please choose yes/no: no
  Your choose is no!
  [root@ecs-c13b ~]# bash case1.sh
  Please choose yes/no: a
  Your choose is error!
  [root@ecs-c13b ~]#
  2. 早饭吃什么
 
  #!/bin/bash
  printf "%-5s %-10s\n" 序号 食物
  printf "%-5s %-10s\n" 1 米饭
  printf "%-5s %-10s\n" 2 包子
  printf "%-5s %-10s\n" 3 油条
  read -p "请选择你今天要吃什么: " num
  expr $num + 1 &> /dev/null   ### 这里+1 判断是不是整数
  if [ "$?" -ne 0 ];then    ## $? 加“”,如果不等于零代表是不整数
  echo "请输入数字{1|2|3}"
  exit 1
  fi
  case $num in
  1)
  echo "米饭一碗"
  ;;
  2)
  echo "包子一份"
  ;;
  3)
  echo "油条一份"
  ;;
  *)
  echo "这个有,有吗?那没有"
  ;;
  esac
  执行返回结果:
 
  [root@ecs-c13b ~]# bash case2.sh
  序号 食物    
  1     米饭    
  2     包子    
  3     油条    
  请选择你今天要吃什么: 1
  米饭一碗
  [root@ecs-c13b ~]# bash case2.sh
  序号 食物    
  1     米饭    
  2     包子    
  3     油条    
  请选择你今天要吃什么: 2
  包子一份
  [root@ecs-c13b ~]# bash case2.sh
  序号 食物    
  1     米饭    
  2     包子    
  3     油条    
  请选择你今天要吃什么: 9
  这个有,有吗?那没有
  [root@ecs-c13b ~]#
  3. apache服务启动脚本实战
 
  #!/bin/bash
  case $1 in
      start)   
          systemctl $1 httpd
          ps aux|grep httpd
          echo "httpd start"
          ;;
      stop)
          systemctl $1 httpd
          ps aux|grep httpd
          echo "httpd stop"
          ;;
      status)
          systemctl $1 httpd
          ;;
      restart)
          systemctl $1 httpd
          echo "httpd restart"
          ;;
      *)
          echo "USAGE: $0  start|stop|restart"
  esac
  执行结果:
 
  [root@ecs-c13b ~]# bash case3.sh status
  ● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
     Active: active (running) since Thu 2020-08-06 08:10:17 CST; 15s ago
       Docs: man:httpd(8)
             man:apachectl(8)
  总结
 
  case语句是有限的条件,如果条件太多linux语句,写起来也麻烦。case语句要结合if条件语句,两者可以改写。 知识case有时候逻辑更清晰一点, if条件语句相对而言显得虚幻。
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!