前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >09·Shell编程-case流程控制

09·Shell编程-case流程控制

作者头像
DriverZeng
发布2022-09-26 10:35:04
2510
发布2022-09-26 10:35:04
举报
文章被收录于专栏:Linux云计算及前后端开发

-曾老湿, 江湖人称曾老大。


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


case语句介绍

case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

在某些时候,case要优于if,少写很多判断

case语句格式

语法

代码语言:javascript
复制
case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

case 工作方式如上所示,取值后面必须为单词 in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。


用法举例

现实举例

代码语言:javascript
复制
case "你的个人条件" in
          有钱)
                能迎娶白美
                ;;
          有权)
                能迎娶白富美
                ;;
          有才有能力有潜力)
                能找到对象,白不白不一定,富美些许有点够呛
                ;;
          *都不满足)
               研究研究,枕什么样的枕头,可以梦到迎娶白富美吧

程序举例

请写一个,阿拉伯数字1-10转中文大写的程序,输入1,打印 壹...

如果要用if判断来实现,得写10个判断,这个时候使用case就比较舒服。

还有之前的ansible模块脚本,把if判断换成case就会很舒服。

使用if

代码语言:javascript
复制
[root@zabbix01 ~]# cat if.sh
#!/bin/bash

num=$1

if [ $num -eq 1 ];then
  echo '壹'
elif [ $num -eq 2 ];then
  echo '贰'
elif [ $num -eq 3 ];then
  echo '叁'
elif [ $num -eq 4 ];then
  echo '肆'
elif [ $num -eq 5 ];then
  echo '伍'
elif [ $num -eq 6 ];then
  echo '陆'
elif [ $num -eq 7 ];then
  echo '柒'
elif [ $num -eq 8 ];then
  echo '捌'
elif [ $num -eq 9 ];then
  echo '玖'
elif [ $num -eq 10 ];then
  echo '拾'
else
  echo '请输入1-10的数字'
fi

使用case

代码语言:javascript
复制
[root@zabbix01 ~]# cat case.sh
#!/bin/bash

num=$1
case $num in
    1)
      echo '壹'
      ;;
    2)
      echo '贰'
      ;;
    3)
      echo '叁'
      ;;
    4)
      echo '肆'
      ;;
    5)
      echo '伍'
      ;;
    6)
      echo '陆'
      ;;
    7)
      echo '柒'
      ;;
    8)
      echo '捌'
      ;;
    9)
      echo '玖'
      ;;
    10)
      echo '拾'
      ;;
    *)
      echo '请输入1-10的数字'
esac

[root@zabbix01 ~]# sh case.sh 1
壹
[root@zabbix01 ~]# sh case.sh 2
贰
[root@zabbix01 ~]# sh case.sh 3
叁
[root@zabbix01 ~]# sh case.sh 4
肆
[root@zabbix01 ~]# sh case.sh 5
伍
[root@zabbix01 ~]# sh case.sh 6
陆
[root@zabbix01 ~]# sh case.sh 7
柒
[root@zabbix01 ~]# sh case.sh 8
捌
[root@zabbix01 ~]# sh case.sh 9
玖
[root@zabbix01 ~]# sh case.sh 10
拾
[root@zabbix01 ~]# sh case.sh 11
请输入1-10的数字
[root@zabbix01 ~]# sh case.sh 12
请输入1-10的数字

升级一下,输入1或者一都打印出大写壹

Shell中给你点颜色看看

在我们使用shell的时候,难免会有一些带颜色的需求,比如说,在座的各位都喜欢的黄色,那么我们在shell中,如何给字符串加上自己想要的颜色呢?

加颜色的固定格式

代码语言:javascript
复制
\e[1;31m 红色的zls\e[0m

[root@zabbix01 ~]# echo -e '\e[1;31m 红色的zls\e[0m'
 红色的zls
 
 ## 分析
1)开头的   \e 或者 \E 或者 \033  表示开始调整颜色

2)中括号中的第一个数字 1; 这里代表字体的状态
0:表示正常
1:表示加粗
2:变浅
3:斜体
4:下划线
5:闪烁

3)再往后 Nm表示字体颜色
30m:黑色
31m:红色
32m:绿色
33m:黄色
34m:蓝色
35m:紫色
36m:天蓝
37m:白色

4)背景颜色
40:黑底
41:红底
42:绿底
43:黄底
44:蓝底
45:紫底
46:天蓝
47:白底

例:
[root@zabbix01 ~]# echo -e '\e[46;30m 天蓝底黑色的zls\e[0m'

写一个点单系统

需求:根据菜单,输入水果名字或者菜单的编号,然后输出该水果的名称并且带上该水果的颜色。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • case语句介绍
    • case语句格式
    • Shell中给你点颜色看看
      • 写一个点单系统
      相关产品与服务
      运维安全中心(堡垒机)
      腾讯云运维安全中心(堡垒机)(Operation and Maintenance Security Center (Bastion Host))可为您的 IT 资产提供代理访问以及智能操作审计服务,为客户构建一套完善的事前预防、事中监控、事后审计安全管理体系,助力企业顺利通过等保测评。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档