case和select结构在技术上说不是循环,因为它们并不对可执行的代码块进行迭代.但是和循环相似的是,它们也依靠在代码块的顶部或底部的条件判断来决定程序的分支.
在代码块中控制程序分支
case (in) / esac
在shell中的case同C/C++中的switch结构是相同的.它允许通过判断来选择代码块中多条路径中的一条.它的作用和多个if/then/else语句相同,是它们的简化结构,特别适用于创建目录.
case "$variable" in ?"$condition1" ) ?command... ?;; ?"$condition2" ) ?command... ?;; esac
对变量使用""并不是强制的,因为不会发生单词分离.
每句测试行,都以右小括号)结尾.
每个条件块都以两个分号结尾;;.
case块的结束以esac(case的反向拼写)结尾.
例子:使用case
#!/bin/bash# 测试字符串范围echo; echo "Hit a key, then hit return."read Keypresscase "$Keypress" in [[:lower:]] ) echo "Lowercase letter";; [[:upper:]] ) echo "Uppercase letter";; [0-9] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";;esac # 允许字符串的范围出现在[]中, #+ 或者POSIX风格的[[中.# 在这个例子的第一个版本中,#+ 测试大写和小写字符串使用的是#+ [a-z] 和 [A-Z].# 这种用法将不会在某些特定的场合或Linux发行版中正常工作.exit 0