
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.11 实战案例:简单、高效的case语句
Shell脚本中除了可以使用if...then...else...fi语句,还提供了一种书写更简单、可读性更好的case语句,case语句可以将某个关键词与预设的一系列值进行模式匹配。
case语句的格式如下。
case word in 模式1) 命令序列1; ; 模式2) 命令序列2; ; ...... *) 命令序列n; ; esac
case语句还支持多个条件的匹配,语法格式如下。
case word in 模式1|模式2|模式3) 命令序列1; ; 模式4|模式5|模式6) 命令序列2; ; ... ... *) 命令序列n; ; esac
上面的语法中,case命令首先会展开word关键字,然后将该关键字与下面的每个模式进行匹配比较。word关键字展开支持使用~(根目录)、变量展开$、算术运算展开$[]、命令展开$()等。每个模式匹配中也都支持与word关键字一样的展开功能。一旦case命令发现有匹配的模式,则执行对应命令序列中的命令。如果命令序列的最后使用了;;(双分号),则case命令不再对后续的模式进行匹配比较,即匹配停止。如果使用;&替代;;会导致case继续执行下一个模式匹配中附加的命令序列。如果使用;; &替代;;则会导致case继续对下一个模式进行匹配,如果匹配则执行对应命令序列中的命令。下面通过几个简单的实例学习case语句的基本语法格式。



在1.3节,讲解了如何使用echo或者printf命令创建脚本菜单。但是因为没有if或case语句的支持,所以前面的脚本是无法对菜单进行响应的。现在继续优化完善这个脚本。


case命令可以使用管道符号(|)进行多个模式的匹配,编写有些交互脚本时需要使用这个功能。
