你会经常发现自己在尝试计算一个变量的值,在一组可能的值中寻找特定值。在这种情形下,

你不得不写出很长的if-then-else语句,就像下面这样。

  1. $ cat test25.sh
  2.  
  3. #!/bin/bash
  4.  
  5. # looking for a possible value
  6.  
  7. #
  8.  
  9. if [ $USER = "rich" ]
  10.  
  11. then
  12.  
  13. echo "Welcome $USER"
  14.  
  15. echo "Please enjoy your visit"
  16.  
  17. elif [ $USER = "barbara" ]
  18.  
  19. then
  20.  
  21. echo "Welcome $USER"
  22.  
  23. echo "Please enjoy your visit"
  24.  
  25. elif [ $USER = "testing" ]
  26.  
  27. then
  28.  
  29. echo "Special testing account"
  30.  
  31. elif [ $USER = "jessica" ]
  32.  
  33. then
  34.  
  35. echo "Do not forget to logout when you're done"
  36.  
  37. else
  38.  
  39. echo "Sorry, you are not allowed here"
  40.  
  41. fi
  42.  
  43. $
  44.  
  45. $ ./test25.sh
  46.  
  47. Welcome rich
  48.  
  49. Please enjoy your visit

如上面的案例,我们需要做多个if判断来一一核对,代码量比较多,还容易乱,这时可以用case用法来减少代码量,

有了case命令,就不需要再写出所有的elif语句来不停地检查同一个变量的值了。case命

令会采用列表格式来检查单个变量的多个值。

  1. #!/bin/bash
  2. # using the case command
  3. #
  4. case $USER in
  5. rich | barbara)
  6. echo "Welcome, $USER"
  7. echo "Please enjoy your visit";;
  8. testing)
  9. echo "Special testing account";;
  10. jessica)
  11. echo "Do not forget to log off when you're done";;
  12. *)
  13. echo "Sorry, you are not allowed here";;
  14. esac

case 用法也常用于启动脚本中

  1. #!/bin/sh
  2.  
  3. # Comments to support chkconfig on RedHat Linux
  4. # chkconfig:
  5. # description: A very fast and reliable Tomcat.
  6.  
  7. export JAVA_HOME=/data/jdk8/
  8.  
  9. tomcat[]="/data/Tomcat/"
  10. project="/data/www/kstore/"
  11. module="site boss mobile third open"
  12. webinf="/htdocs/WEB-INF/"
  13. war="/htdocs/war/"
  14.  
  15. start(){
  16. cache
  17.  
  18. for i in ${tomcat[@]}
  19. do
  20. ${i}/bin/startup.sh
  21. sleep
  22. done
  23.  
  24. sleep
  25.  
  26. test
  27. }
  28.  
  29. stop(){
  30. for i in ${tomcat[@]}
  31. do
  32. ${i}/bin/shutdown.sh
  33. rm -rf ${i}/work/Catalina/
  34. pid=$(ps -ef | grep ${i} | grep -v grep | awk '{print $2}')
  35. if [ "${pid}" != "" ];then
  36. kill - ${pid}
  37. fi
  38.  
  39. sleep
  40. done
  41.  
  42. cache
  43.  
  44. test
  45. }
  46.  
  47. test(){
  48. for i in ${tomcat[@]}
  49. do
  50. pid=$(ps -ef | grep ${i} | grep -v grep | awk '{print $2}')
  51. if [ "${pid}" != "" ];then
  52. echo "${i} is running!"
  53. else
  54. echo "${i} may not be running!"
  55. fi
  56. done
  57. }
  58.  
  59. change(){
  60. transfer(){
  61. a=`find ~ -name "*.war" | wc -l`
  62.  
  63. if [ ${a} -gt ];then
  64. mv ${war}/*.war ${war}/backup/
  65. mv ~/*.war ${war}
  66. fi
  67.  
  68. for i in ${module[@]}
  69. do
  70. b=$(ls -A ${war} | grep "${i}")
  71. if [ "${b}" != "" ];then
  72. echo ${i}
  73. fi
  74. done
  75. }
  76.  
  77. app=$(transfer)
  78.  
  79. for i in ${app[@]}
  80. do
  81. rm -rf ${project}${i}
  82. mkdir ${project}${i}
  83. unzip -q ${war}/*${i}*.war -d ${project}${i}
  84. cp -rf ${webinf} ${project}${i}
  85. sed -i "/amq.destination/s/boss/${i}/g" ${project}/${i}/WEB-INF/classes/com/ningpai/web/config/amq.properties
  86. done
  87. }
  88.  
  89. cache(){
  90. sync
  91. echo 3 > /proc/sys/vm/drop_caches
  92. }
  93.  
  94. case "$1" in
  95. #startup tomcat
  96. start)
  97. start
  98. ;;
  99. #stop tomcat
  100. stop)
  101. stop
  102. ;;
  103. #restart tomcat
  104. restart)
  105. stop
  106. start
  107. ;;
  108. #reload tomcat
  109. reload)
  110. stop
  111. change
  112. start
  113. ;;
  114. #test tomcat
  115. status)
  116. test
  117. ;;
  118. #load tomcat
  119. load)
  120. change
  121. start
  122. ;;
  123. *)
  124. echo "Use tomcat start|stop|status|restart|reload|load"
  125. ;;
  126. esac

shell脚本之case用法的更多相关文章

  1. shell脚本中case的用法

    shell脚本中case选择语句可以结合read指令实现比较好的交互应答操作,case接收到read指令传入的一个或多个参数,然后case根据参数做选择操作. case的语法如下 case $char ...

  2. Linux上shell脚本date的用法

    在shell脚本里date命令的用法: %% 一个文字的 % %a 当前locale 的星期名缩写(例如: 日,代表星期日) %A 当前locale 的星期名全称 (如:星期日) %b 当前local ...

  3. shell脚本实例-case实现jumpserver跳板机

    1,先通过ssh-keygen 生成公钥,然后将公钥推送到各个主机ssh-copy-id web1|ip 2简单的代码实现 #!/usr/bin/bash trap "" HUP ...

  4. shell脚本之case语句

    case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行 ...

  5. Linux Shell脚本编程case条件语句

    1,判断一个数字是否则在1,2,3之中. #!/bin/bash read -p "pls input a number:" n case "$n" in ) ...

  6. shell脚本实例-case 删除用户判断的小案例

    #!/usr/bin/bash read -p "Please input a username:" user id $user &>/dev/null if [ $ ...

  7. shell脚本中case select 的使用

    #!/bin/bash # case echo "1.Install PHP" echo "2.Install Mysql" echo "3.Inst ...

  8. shell脚本中case /*的作用

    如下语句 case $0 in /*) ;; *) ;; /*在这里的作用就是绝对路径的意思

  9. Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)

    Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...

随机推荐

  1. P1397 [NOI2013]矩阵游戏

    传送门 首先显然可以矩乘快速幂然后 $T$ 飞 看一眼题解发现因为这一题矩阵的特殊性所以可以对矩阵的次数欧拉降幂 然而我并不懂证明,所以我选择暴力乱搞的做法 十进制快速幂,然后注意一下常数,还有矩阵乘 ...

  2. 在mac上配置cocos2d-x开发环境

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012282115/article/details/24374539 一.首先下载cocos2d-x ...

  3. MVVM框架简单实现

    众所周知当下是MVVM盛行的时代,从早期的Angular到现在的React和Vue,再从最初的三分天下到现在的两虎相争. 无疑不给我们的开发带来了一种前所未有的新体验,告别了操作DOM的思维,换上了数 ...

  4. 裸机开发体验之led快速体验

    [root@promote led]# arm-linux-gcc -g -c led.S[root@promote led]# lsled.lds led.o led.S Makefile[root ...

  5. 对mysql进行快照复制

    Myself> flush tables with read lock; 之后开始创建快照 [root@server0 mysql]# lvcreate -L 100M -s -n dbback ...

  6. windows pip使用国内源

    在这里我使用清华源来做示范 win+R 打开用户目录%HOMEPATH%,在此目录下创建 pip 文件夹,在 pip 目录下创建 pip.ini 文件, 内容如下, 在pip文件夹里新建的pip.in ...

  7. final修饰符—不可变

    final 修饰符 修饰类 不可以有子类 修饰变量 变量一旦获得初始值就不可改变,不能被重新赋值 成员变量:初始值必须有程序员显式设置,系统不会对其隐式初始化 类变量:静态初始化块 | 声明该类变量时 ...

  8. 自动化运维——HelloWorld(一)

    1.HelloWorld vi first_shell.sh #!/bin/bash #Filename: first_shell.sh #auto echo hello world! #by aut ...

  9. DevExpress WPF v19.1新版亮点:主题/Tree List等控件新功能

    行业领先的.NET界面控件DevExpress 日前正式发布v19.1版本,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WPF v19.1中新增的一些控件及部 ...

  10. 玩蛇记之用python实现易宝快速支付接口

    玩蛇记之用python实现易宝快速支付接口 现在很多这种快速支付的通道,易宝支持的通道算是很全面的,正好最近需要集成易宝的支付通道到平台中,所以写一贴来记录一下,顺便鄙视一下国内的支付平台,api的支 ...