zoukankan      html  css  js  c++  java
  • shell的case用法

    今天给大家简单介绍一下结构条件语句的用法,实际上就是规范的多分支if语句,如下:

    case语法:

    case "字符串变量" in

      值1)指令1...

    ;;

      值2)指令2...

    ;;

          ......

          *)指令3...

    esac

    --------------------------------------------------------------------------------------

    ok,我们可以换一种方式理解:

    中文编程语法:

    case "找女朋友条件" in 

      有房)嫁给你...

    ;;

      你爸是李刚) 嫁给你...

    ;;

      有上进心) 可以考虑先做朋友...

    ;;

      *)good bye bye! ...

    esac

    ---------------------------------------------------------------------

    下面我们拿根据菜单选项手机充值脚本一个例子来测试一下效果:

     测试1:根据用户的输入值判断 是哪个数字,给出相对应的服务或提示信息

     1 [root@bqh-117 scripts]# vim case1.sh
     2 #!/bin/sh
     3 #date:2019-04-20
     4 #maill:1147076062@qq.com
     5 #author:aゞ锦衣卫 
     6 #script function:This is a order script.
     7 #===============================================
     8 function menu() {
     9 cat <<bqh                                        #定义menu打印菜单函数
    10      手机充值一键服务:
    11 ===============================
    12    1.10元RMB
    13    2.30元RMB
    14    3.50元RMB
    15    4.100元RMB
    16    5.我再考虑考虑...
    17 
    18               author:a?锦衣卫
    19               date:2019-04-20
    20 ===============================
    21 bqh
    22 }
    23 menu
    24 
    25 function usage() {                         #定义usage函数用与交互式提示信息
    26 echo "请输入充值类型{1|2|3|4|5}"
    27 }
    28 
    29 read -p "客官,您想充值多少RMB:" num         #read方式获取值
    30 expr $num + 1 &>/dev/null                  #检测num参数是否为整数
    31 if [ $? -ne 0 ];then                       #判断num参数是否为整数,如果不是给出提示并退出
    32     usage
    33     exit 0
    34 fi
    35 
    36 if [ "$num" -eq 0 ];then                  #判断读取的参数是否等于0,若是则给出提示并退出
    37     usage
    38     exit 1
    39 elif [ "$num" -gt 5 ];then                #判断读取的参数是否大于5,若是则给出提示并退出
    40     usage
    41     exit 2
    42 elif [ "$num" -eq 1 ];then                
    43     echo "老板,充值10元RMB"
    44 elif [ "$num" -eq 2 ];then
    45     echo "老板,充值30元RMB"
    46 elif [ "$num" -eq 3 ];then
    47         echo "老板,充值50元RMB"
    48 elif [ "$num" -eq 4 ];then
    49         echo "老板,充值100元RMB"
    50 else
    51     echo "老板,我再考虑考虑..."             #若以上都不符合,则给出提示并退出
    52     exit 3
    53 fi

    执行脚本效果如下:

    上面用if语句写的,感觉比较繁琐,代码量多,下面我们用case语句来实现以下:

     1 [root@bqh-117 scripts]# vim case1.sh 
     2 #!/bin/sh
     3 #date:2019-04-20
     4 #maill:1147076062@qq.com
     5 #author:aゞ锦衣卫 
     6 #script function:This is a order script.
     7 #===============================================
     8 function menu() {
     9 cat <<bqh                                       #定义menu打印菜单函数
    10      手机充值一键服务:
    11 ===============================
    12    1.10元RMB
    13    2.30元RMB
    14    3.50元RMB
    15    4.100元RMB
    16    5.我再考虑考虑...
    17 
    18               author:aゞ锦衣卫
    19               date:2019-04-20
    20 ===============================
    21 bqh
    22 }
    23 menu
    24 #color                            
    25 RED='E[1;31m'      # 红
    26 GREEN='E[1;32m'    # 绿
    27 YELOW='E[1;33m'    # 黄
    28 BLUE='E[1;34m'     # 蓝
    29 PINK='E[1;35m'     # 粉红
    30 SHAN='E[31;5m'     # 闪烁提示
    31 RES='E[0m'         # 清除颜色
    32 
    33 function usage() {                                    #定义usage交互式函数用户提示
    34 echo -e "${SHAN}请输入充值类型{1|2|3|4|5}$RES"
    35 }
    36 
    37 read -p "客官,您想充值多少RMB:" num                    #以read方式获取用户输入值
    38 expr $num + 1 &>/dev/null                             #检测用户输入值是否为整数,并将结果定向、空控设备
    39 if [ $? -ne 0 ];then                                  #判断检测结果是否为0,若为0则给出交互式提示并退出
    40     usage
    41     exit 0
    42 fi
    43 
    44 case $num in                                         #判断num值符合菜单相对应的信息,并给出提示。
    45   1) 
    46     echo "老板,充值10元RMB"
    47    ;;
    48   2)
    49     echo "老板,充值30元RMB"
    50    ;;
    51   3)
    52         echo "老板,充值50元RMB"
    53    ;;
    54   4)
    55         echo "老板,充值100元RMB"
    56    ;;
    57   5)
    58     echo "老板,我再考虑考虑..."
    59     exit 1
    60    ;;
    61   *)                                        #若以上都不符合,则给出交互式提示并退出。
    62     usage
    63     exit 2
    64    ;;
    65 esac

    执行脚本效果如下:

    case工作原理如上面脚本模式,取值后面必须为关键字 in,每一模式必须以右括号结束,取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至 “;;”,;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

  • 相关阅读:
    C++语言的url encode 和decode
    ICE实现服务器客户端
    ICE:slice语言常识整理
    SSH框架总结(框架分析+环境搭建+实例源代码下载)
    MyEclipse下XFire开发Webservice实例
    关于hashCode与equals
    xcode 4.5 new feature __ ios6 新特性
    js中substr与substring的差别
    MP算法和OMP算法及其思想
    android传感器;摇一摇抽签功能
  • 原文地址:https://www.cnblogs.com/su-root/p/10727075.html
Copyright © 2011-2022 走看看