伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

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

来源:本站原创 浏览:131次 时间:2022-01-19

文章目录

    • 前言
    • 什么是case语句
    • case语句语法分析
    • case实战案例
    • 总结
    • 1. 做出你的选择
    • 2. 早饭吃什么
    • 3. apache服务启动脚本实战


前言

前面我们探讨过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/bashread -p "Please choose yes/no: " cho ## 通过输入来确定变量case $cho inyes)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: yesYour choose is yes![root@ecs-c13b ~]# bash case1.sh Please choose yes/no: noYour choose is no![root@ecs-c13b ~]# bash case1.sh Please choose yes/no: aYour choose is error![root@ecs-c13b ~]#

2. 早饭吃什么
#!/bin/bashprintf "%-5s %-10s\n" 序号 食物printf "%-5s %-10s\n" 1 米饭printf "%-5s %-10s\n" 2 包子printf "%-5s %-10s\n" 3 油条read -p "请选择你今天要吃什么: " numexpr $num + 1 &> /dev/null   ### 这里+1 判断是不是整数if [ "$?" -ne 0 ];then    ## $? 加“”,如果不等于零代表是不整数echo "请输入数字{1|2�˽�,��ʶ|3}"exit 1ficase $num in1) 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/bashcase $1 instart)   systemctl $1 httpdps aux|grep httpdecho "httpd start";;stop)systemctl $1 httpdps aux|grep httpdecho "httpd stop";;status)systemctl $1 httpd;;restart)systemctl $1 httpdecho "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条件语句相对而言显得虚幻。

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net