14.2.4 case判断结构

和if/elif/else判断结构一样,case判断结构也可以用于多种可能情况下的分支选择。其语法结构如下:


  1. case VAR in var1) command1 ;;

  2. var2) command2 ;;

  3. var3) command3 ;;

  4. ...

  5. *) command ;;

  6. esac


其原理为从上到下依次比较VAR和var1、var2、var3的值是否相等,如果匹配相等则执行后面的命令语句,在无一匹配的情况下匹配最后的默认*,并执行后面的默认命令。要注意的是,case判断结构中的var1、var2、var3等这些值只能是常量或正则表达式。

下面的脚本可以检测到当前操作系统类型。以下代码case中的匹配值是“常量”。


  1. [root@localhost ~]# cat os_type.sh #!/bin/bash

  2. OS='uname -s'

  3. case

  4. $OS

  5. in

  6. FreeBSD) echo "This is FreeBSD" ;; CYGWIN_NT-5.1) echo "This is Cygwin" ;; SunOS) echo "This is Solaris" ;; Darwin) echo "This is Mac OSX" ;; AIX) echo "This is AIX" ;;

  7. Minix) echo "This is Minix" ;; Linux) echo "This is Linux" ;; *) echo "Failed to identify this OS" ;; esac


下面的脚本可以用于检测用户的输入中是否含有大写字母、小写字母或者数字,这里case匹配的值是正则表达式。


  1. [root@localhost ~]# cat detect_input.sh #!/bin/bash

  2. read -p "Give me a word: " input echo -en "You gave me some "

  3. case $input in

  4. *[[:lower:]]*) echo -en "Lowercase " ;; [[:upper:]]) echo -en "Uppercase " ;; [[:digit:]]) echo -en "Numerical " ;; *) echo "unknown input." ;; esac