11.4 测试与分支
case 和 select 结构并不属于循环结构,因为它们并没有反复执行代码块。但是和循环结构相似的是,它们会根据代码块顶部或尾部的条件控制程序流。
下面介绍两种在代码块中控制程序流的方法:
case (in) / esac
case (in) / esac在 shell 脚本中,case 模拟了 C/C++ 语言中的 switch,可以根据条件跳转到其中一个分支。其相当于简写版的 if/then/else 语句。很适合用来创建菜单选项哟!
case "$variable" in
"$condition1" )
command...
;;
"$condition2" )
command...
;;
esac
对变量进行引用不是必须的,因为在这里不会进行字符分割。
条件测试语句必须以右括号 ) 结束。
每一段代码块都必须以双分号 ;; 结束。
如果测试条件为真,其对应的代码块将被执行,而后整个
case代码段结束执行。
case代码段必须以esac结束(倒着拼写case)。
样例 11-25. 如何使用 case
样例 11-26. 使用 case 创建菜单
你可以用 case 来检测命令行参数。
下面是一个更加直观的处理命令行参数的例子:
样例 11-27. 使用命令替换生成 case 变量
case 还可以用来做字符串模式匹配。
样例 11-28. 简单的字符串匹配
样例 11-29. 检查输入
select
selectselect 结构是学习自 Korn Shell。其同样可以用来构建菜单。
而效果则是终端会提示用户输入列表中的一个选项。注意,select 默认使用提示字串3(Prompt String 3,$PS3, 即#?),但同样可以被修改。
样例 11-30. 使用 select 创建菜单
如果 in list 被省略,那么 select 将会使用传入脚本的命令行参数($@)或者传入函数的参数作为 list。
可以与 for variable [in list] 中 in list 被省略的情况做比较。
样例 11-31. 在函数中使用 select 创建菜单
还可以参照 样例37-3。
最后更新于
这有帮助吗?