11.4 测试与分支

caseselect 结构并不属于循环结构,因为它们并没有反复执行代码块。但是和循环结构相似的是,它们会根据代码块顶部或尾部的条件控制程序流。

下面介绍两种在代码块中控制程序流的方法:

case (in) / esac

在 shell 脚本中,case 模拟了 C/C++ 语言中的 switch,可以根据条件跳转到其中一个分支。其相当于简写版的 if/then/else 语句。很适合用来创建菜单选项哟!

case "$variable" in
  "$condition1" )
    command...
  ;;
  "$condition2" )
    command...
  ;;
esac

note

  • 对变量进行引用不是必须的,因为在这里不会进行字符分割。

  • 条件测试语句必须以右括号 ) 结束。

  • 每一段代码块都必须以双分号 ;; 结束。

  • 如果测试条件为真,其对应的代码块将被执行,而后整个 case 代码段结束执行。

  • case 代码段必须以 esac 结束(倒着拼写case)。

样例 11-25. 如何使用 case

样例 11-26. 使用 case 创建菜单

你可以用 case 来检测命令行参数。

下面是一个更加直观的处理命令行参数的例子:

样例 11-27. 使用命令替换生成 case 变量

case 还可以用来做字符串模式匹配。

样例 11-28. 简单的字符串匹配

样例 11-29. 检查输入

select

select 结构是学习自 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

最后更新于

这有帮助吗?