首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
常用软件
运维软件
办公软件
书籍资源
日知录
招聘信息
读书计划
书单
关于我们
首页 运维教程Linux基础【Linux】shell脚本实战-流程控制语句case

【Linux】shell脚本实战-流程控制语句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语句的语法规范****

  • 表达式expr按顺序匹配每个模式,一旦匹配成功,则执行该模式后面的命令块,然后退出case语句
  • 如果没有找到匹配的模式,则执行默认值”)”后的命令块, ”)”可以没有
  • 模式中可以包含通配符或”|”,如果多个模式对应同一个命令块,则使用“|”将各个模式分开
  • 每个模式必须以右圆括号”)”结束
  • 每个命令块必须以双分号(;;)结束,双分号可独占一行,也可放在最后一个命令的后面
  • 以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

casenum 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)          systemctl1 httpd
        ps aux|grep httpd
        echo "httpd start"
        ;;
    stop)
        systemctl 1 httpd
        ps aux|grep httpd
        echo "httpd stop"
        ;;
    status)
        systemctl1 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语句是有限的条件,如果条件太多,写起来也麻烦。case语句要结合if条件语句,两者可以改写。 知识case有时候逻辑更清晰一点, if条件语句相对而言显得虚幻。

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

本文链接:http://www.geekyunwei.com/2044.html

网友评论comments

发表评论

邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2021 极客运维 备案号: 京ICP备2021004281号
扫二维码
扫二维码
返回顶部