为绿春等地区用户提供了全套网页设计制作服务,及绿春网站建设行业解决方案。主营业务为成都网站制作、成都做网站、绿春网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了。
《Shell if else》一节的最后给出了一个例子,就是输入一个整数,输出该整数对应的星期几的英文表示,这节我们就用 case in 语句来重写代码,如下所示。
#!/bin/bash printf "Input integer number: " read num case $num in 1) echo "Monday" ;; 2) echo "Tuesday" ;; 3) echo "Wednesday" ;; 4) echo "Thursday" ;; 5) echo "Friday" ;; 6) echo "Saturday" ;; 7) echo "Sunday" ;; *) echo "error" esac
运行结果:
Input integer number:3↙
Wednesday
看了这个例子,相信大家对 case in 语句有了一个大体上的认识,那么,接下来我们就正式开始讲解 case in 的用法,它的基本格式如下:
case expression in
pattern1)
statement1
;;
pattern2)
statement2
;;
pattern3)
statement3
;;
……
*)
statementn
esac
case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式。
case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配:
;;
才停止;然后整个 case 语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。*)
后面的语句(*
表示其它所有值),直到遇见双分号;;
或者esac
才结束。*)
相当于多个 if 分支语句中最后的 else 部分。 对*)
的几点说明:
*)
用来“托底”,万一 expression 没有匹配到任何一个模式,*)
部分可以做一些“善后”工作,或者给用户一些提示。*)
部分。如果 expression 没有匹配到任何一个模式,那么就不执行任何操作。 除最后一个分支外(这个分支可以是普通分支,也可以是*)
分支),其它的每个分支都必须以;;
结尾,;;
代表一个分支的结束,不写的话会有语法错误。最后一个分支可以写;;
,也可以不写,因为无论如何,执行到 esac 都会结束整个 case in 语句。
上面的代码是 case in 最常见的用法,即 expression 部分是一个变量,pattern 部分是一个数字或者表达式。
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"。 |
如果不加以说明,Shell 的值都是字符串,expression 和 pattern 也是按照字符串的方式来匹配的;本节第一段代码看起来是判断数字是否相等,其实是判断字符串是否相等。
最后一个分支*)
并不是什么语法规定,它只是一个正则表达式,*
表示任意字符串,所以不管 expression 的值是什么,*)
总能匹配成功。
下面的例子演示了如何在 case in 中使用正则表达式:
#!/bin/bash printf "Input a character: " read -n 1 char case $char in [a-zA-Z]) printf "\nletter\n" ;; [0-9]) printf "\nDigit\n" ;; [0-9]) printf "\nDigit\n" ;; [,.?!]) printf "\nPunctuation\n" ;; *) printf "\nerror\n" esac
运行结果1:
Input integer number: S
letter
运行结果2:
Input integer number: ,
Punctuation
网页标题:Shell case in语句详解
URL地址:http://www.gawzjz.com/qtweb2/news42/10992.html
成都网站建设公司_创新互联,为您提供手机网站建设、品牌网站制作、网站排名、搜索引擎优化、网站内链、网站设计公司
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联