case in的用法,它的基本格式如下:
case expression in
pattern1)
statement1l
;;
pattern2)
statement2
;;
........
*)
statementn
case、in 和esac都是Shell关键字,expression表
示表达式,pattern表示匹配模式
expression既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到expression的值就可以。
patterh可以是一个数字、一个字符串,甚至是一个简单的正则表达式;
例:
输出结果:
case会将expression的值与pattern1、pattern2、pattern3逐个进行匹配:
- 如果expression和某个模式(比如pattern2 )匹
配成功,就会执行这模式(比如pattern2 )后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;才停止;然后整个case语句就执行完了,程序会跳出整个case语句,执行esac后面的其它语句。 - 如果expression没有匹配到任何- -个模式,那么就执行*)后面的语句( 表示其它所有值),直到遇见双分号;或者esac才结束。)相当于多个if分支语句中最后的else部分
对*)的几点说明:
- Shell case in语句中的*)用来“托底”,万一expression没有匹配到任何一个模式,*)部分可以做一些“善后”工作,或者给用户一些提示。
- 可以没有*)部分。如果expression没有匹配到任何一个模式,那么就不执行任何操作
- 除最后一个分支外(这个分支可以是普通分支,也可以是*)分支),其它的每个分支都必须以;;结尾,;;代表一个分支的结束,不写的话会有语法错误。最后一个分支可以写;;,也可以不写,因为无论如何,执行到esac都会结束整个case in语句。
case in 和正则表达式
case in的pattern部分支持简单的正则表达式,具体来说,可以使用以下几种格式:
格式 | 说明 |
---|---|
* | 表示任意字符串 |
[abc] | 表示a、b、C三个字符中的任意一-个。 比如,[15ZH]表示1、5、Z、H四个字符中的任意-个。 |
[m-n] | 表示从m到n的任意一个字符。比如,[0-9] 表示任意-个数字,[0-9a-zA-Z]表示字母或数字。 |
丨 | 表示多重选择,类似逻辑运算中的或运算。比如,abc丨xyz表示匹配字符串"abc"或者"xyz" |