case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构。

case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

  1. case in
  2. 模式1)
  3. command1
  4. command2
  5. command3
  6. ;;
  7. 模式2
  8. command1
  9. command2
  10. command3
  11. ;;
  12. *)
  13. command1
  14. command2
  15. command3
  16. ;;
  17. esac

case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。

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

例1,

  1. echo 'Input a number between 1 to 4'
  2. echo 'Your number is:\c'
  3. read aNum
  4. case $aNum in
  5. ) echo 'You select 1'
  6. ;;
  7. ) echo 'You select 2'
  8. ;;
  9. ) echo 'You select 3'
  10. ;;
  11. ) echo 'You select 4'
  12. ;;
  13. *) echo 'You do not select a number between 1 to 4'
  14. ;;
  15. esac
  16.  
  17. # read 输入语句 类似 input
  18. 输入不同的内容,会有不同的结果,例如:
  19. Input a number between to
  20. Your number is:
  21. You select

例2:

  1. #!/bin/bash
  2. option="${1}"
  3. case ${option} in
  4. -f) FILE="${2}"
  5. echo "File name is $FILE"
  6. ;;
  7. -d) DIR="${2}"
  8. echo "Dir name is $DIR"
  9. ;;
  10. *)
  11. echo "`basename ${0}`:usage: [-f file] | [-d directory]"
  12. exit # Command to come out of the program with status
  13. ;;
  14. esac
  15.  
  16. [root@localhost test]# ./case2.sh -d ddsss
  17. Dir name is ddsss
  18. [root@localhost test]# ./case2.sh -f ddsss
  19. File name is ddsss

练习:写一个脚本 showlogged.sh, 其用法格式为:

showlogged.sh -v -c -h|--help

其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户,如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息:

  1. #/bin/bash
  2. #
  3. declare -i SHOWNUM=
  4. declare -i SHOWUSERS=
  5.  
  6. for I in `seq $#`;do
  7. if [ $# -gt ];then
  8. case $ in
  9. -h|--help)
  10. echo "Usage:`basename $0` -h|--help -c|count -v|--verbose"
  11. exit ;;
  12. -v|--verbose)
  13. let SHOWUSERS=
  14. shift ;;
  15. -c|--count)
  16. let SHOWNUM=
  17. shift ;;
  18. *)
  19. echo "Usage:`basename $0` -h|--help -c|count -v|--verbose"
  20. exit ;;
  21. esac
  22. fi
  23. done
  24. if [ $SHOWNUM -eq ];then
  25. echo "Logged users:`who | wc -l`."
  26. if [ $SHOWUSERS -eq ];then
  27. echo "They are:"
  28. who
  29. fi
  30. fi
  31.  
  32. [root@beary test]# ./case4.sh -c
  33. Logged users:.
  34. [root@beary test]# ./case4.sh -c -v
  35. Logged users:.
  36. They are:
  37. root tty1 -- :
  38. root pts/ -- :

添加,删除用户脚本:

case 优化版

-v 显示执行过程,-add ,-del 可同时使用

  1. [root@beary test]# cat case3.sh
  2. #/bin/bash
  3. #
  4. DEBUG=
  5. ADD=
  6. DEL=
  7.  
  8. for I in `seq $#`;do
  9. if [ $# -gt ];then
  10. case $ in
  11. -v|--verbose)
  12. DEBUG=
  13. shift
  14. ;;
  15. -h|--help)
  16. echo "Usage:`basename $0` -add USER_LIST -del USER_LIST -v|--verbose -h|--help"
  17. exit
  18. ;;
  19. -add)
  20. ADD=
  21. ADDUSERS=$
  22. shift
  23. ;;
  24. -del)
  25. DEL=
  26. DELUSERS=$
  27. shift
  28. ;;
  29. *)
  30. echo "Usage:`basename $0` -add USER_LIST -del USER_LIST -v|--verbose -h|--help"
  31. exit
  32. ;;
  33. esac
  34. fi
  35. done
  36.  
  37. if [ $ADD -eq ];then
  38. for USER in `echo $ADDUSERS | sed 's#,# #g'`;do
  39. if id $USER &> /dev/null;then
  40. [ $DEBUG -eq ] && echo "$USER exists."
  41. else
  42. useradd $USER
  43. [ $DEBUG -eq ] && echo "Add user $USER finished."
  44. fi
  45. done
  46. fi
  47.  
  48. if [ $DEL -eq ];then
  49. for USER in `echo $DELUSERS | sed 's#,# #g'`;do
  50. if id $USER &> /dev/null;then
  51. userdel -r $USER
  52. [ $DEBUG -eq ] && echo "Del user $USER finished."
  53. else
  54. [ $DEBUG -eq ] && echo "$USER no such!!"
  55. fi
  56. done
  57. fi
  58.  
  59. [root@beary test]# ./case3.sh -v -add xin,fd,dd,dfdkl -del xin,fd,dd
  60. Add user xin finished.
  61. Add user fd finished.
  62. Add user dd finished.
  63. Add user dfdkl finished.
  64. Del user xin finished.
  65. Del user fd finished.
  66. Del user dd finished.

sh4.case语句的更多相关文章

  1. 为什么说在使用多条件判断时switch case语句比if语句效率高?

    在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...

  2. 在 case 语句中使用字符串-转

    http://www.cnblogs.com/del/archive/2008/07/08/1237856.html 非常遗憾 Delphi 的 case 语句不支持字符串, 但我觉得这也可能是基于效 ...

  3. Oracle IF & CASE语句

    IF语句主要有以下三种基本形式: 一. IF-THEN语句 IF CONDITION THEN           STATEMENT 1;           ...           STATE ...

  4. Mysql之case语句(附带实例)

    这段时间,做项目做累了,好不容易有点个人的学习时间,利用这个小时,总结一下,最近做统计的时候常用的case语句吧. 结构:case  when… then …end 1.判断的同时改变其值 eg:   ...

  5. case语句

    case语句是多分支选择语句,if语句只有两个分支可供选择,而实际问题中常常需要用到多分支选择结构.例如,学生成绩分类(90分以上为A,--):人口统计分类(按年龄分为老.中.青.少.幼)等.当然这些 ...

  6. shell script 学习笔记-----if,for,while,case语句

    1.if内的判断条件为逻辑运算: 2.if内的判断条件为目录是否存在,文件是否存在,下图先检验目录/home/monster是否存在,然后再检测/home/monster中的file.txt文件是否存 ...

  7. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  8. [shell基础]——if/for/while/until/case 语句

    for语句 do echo $loop done ` do echo $loop done for loop in `ls /tmp` do echo $loop done while语句 while ...

  9. java中的Switch case语句

    java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...

随机推荐

  1. 纯css,编写菜单移入效果

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  2. flask-- 基础篇

    flask简介: flask是一轻量级的web应用框架,它的实现是一个 wsgi 的微("Micro")框架,当然微("Micro")也不意味这它的功能存在不足 ...

  3. ActiveMQ_Mqtt的TCP丢包

    现象 Mqtt Consumer应该收到的消息少于预期,登录ActiveMQ的管理页面里的Topics,查看Messages Enqueued发现同样少于理应接收的数量. 定位问题 怀疑是TCP丢包, ...

  4. 安装Windows10,Ubuntu双系统14.04LTS记录

    参考链接:http://www.jianshu.com/p/2eebd6ad284d(推荐直接看这个链接,我也是看这篇博客装的)然后自己记录一下,防止以后找不到了 本记录是在Windows10 上安装 ...

  5. oracle--存储过程--bai

    --1 无入参最简单的存储过程 create or replace procedure hello_proc as v_name varchar2(20); v_age number; begin v ...

  6. C#之类的使用

    属性与字段的使用类似iOS class Class1 { //字段私有,属性公有 private string _name; private int _age; /*control + r -> ...

  7. es6学习笔记(1) let和const命令详解

    let和const命令: Es6新增了let命令,声明变量,但与var不一样的,只在let命令所在的代码块内有效(如for循环之外let声明的变量就不再有效).并且let不像var那样会发生" ...

  8. vue自定义指令

    Vue自定义指令: Vue.directive('myDr', function (el, binding) { el.onclick =function(){ binding.value(); } ...

  9. 【译】使用 CocoaPods 模块化iOS应用

    原文翻译自:Using CocoaPods to Modularize a Big iOS App 为你的移动应用选择正确的架构是一件相当大的事情,这会对你的工作流程造成影响,陷入面对的问题,可能是一 ...

  10. 兼容好的JS图片上传预览代码

    转 : http://www.codefans.net/articles/1395.shtml 兼容好的JS图片上传预览代码 (谷歌,IE11) <html xmlns="http:/ ...