14.2.4 case判断结构
和if/elif/else判断结构一样,case判断结构也可以用于多种可能情况下的分支选择。其语法结构如下:
- case VAR in var1) command1 ;;
var2) command2 ;;
var3) command3 ;;
...
*) command ;;
esac
其原理为从上到下依次比较VAR和var1、var2、var3的值是否相等,如果匹配相等则执行后面的命令语句,在无一匹配的情况下匹配最后的默认*,并执行后面的默认命令。要注意的是,case判断结构中的var1、var2、var3等这些值只能是常量或正则表达式。
下面的脚本可以检测到当前操作系统类型。以下代码case中的匹配值是“常量”。
- [root@localhost ~]# cat os_type.sh #!/bin/bash
OS='uname -s'
case
“$OS
” in
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" ;;
Minix) echo "This is Minix" ;; Linux) echo "This is Linux" ;; *) echo "Failed to identify this OS" ;; esac
下面的脚本可以用于检测用户的输入中是否含有大写字母、小写字母或者数字,这里case匹配的值是正则表达式。
- [root@localhost ~]# cat detect_input.sh #!/bin/bash
read -p "Give me a word: " input echo -en "You gave me some "
case $input in
*[[:lower:]]*) echo -en "Lowercase " ;; [[:upper:]]) echo -en "Uppercase " ;; [[:digit:]]) echo -en "Numerical " ;; *) echo "unknown input." ;; esac