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

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

发布时间:2022-09-30 17:01:09 所属栏目: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条件语句相对而言显得虚幻。

互联网老辛: csdn博客: zmedu.blog.csdn.net/article/details/108172952

(编辑:成都站长网)

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