本文是Linux Shell脚本系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell脚本系列教程
上一篇之 后,分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使用switch … case格式,但是在Shell却没有switch … case,不过别担心,Shell是支持分支语句的,只不过使用case … esac格式而已。二者在本质上是相同的。
一、Shell分支语句case···esac语法
case 值 in 模式1) command1 command2 command3 ;; 模式2) command1 command2 command3 ;; *) command1 command2 command3 ;; esac
说明:case后为取值,值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束。
值可以为变量或常数。
模式支持正则表达式,可以用以下字符:
* 任意字串 ? 任意字元 [abc] a, b, 或c三字元其中之一 [a-n] 从a到n的任一字元 | 多重选择
匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。
;; 与其他语言中的 break 类似,意思是不执行接下来的语句而是跳到整个 case 语句的最后。
*)与default相似,如果上面没有匹配到的模式,则执行*)里的内容。
二、Shell分支语句case···esac使用举例
通过一个例子来学习下case…esac命令:
#!/bin/sh #auther:linuxdaxue.com #date:2016-05-30 case $1 in start | begin) echo "I am started!" ;; stop | end) echo "I am stopped!" ;; *) echo "Other command!" ;; esac
说明:这个脚本练习的是模式匹配,模式匹配支持‘|’符,有一个条件符合就会执行命令。
输出:
$./test.sh start I am started! $./test.sh stop I am stopped! $./test.sh begin I am started! $/test.sh hello Other command!
接下来给大家演示一个通过case…esac语句产生菜单的例子:
#!/bin/bash #Author:linuxdaxue.com #Date:2016-05-30 #Desc:Shell case菜单练习 clear # 清屏. echo " Contact List" echo " ------- ----" echo "Choose one of the following persons:" echo echo "[E]vans, Roland" echo "[J]ones, Mildred" echo "[S]mith, Julie" echo "[Z]ane, Morris" echo read person case "$person" in # 注意, 变量是被""引用的. "E" | "e" ) # 接受大写或者小写输入. echo echo "Roland Evans" echo "4321 Floppy Dr." echo "Hardscrabble, CO 80753" echo "(303) 734-9874" echo "(303) 734-9892 fax" echo "revans@zzy.net" echo "Business partner & old friend" ;; # 注意, 每个选项后边都要以双分号;;结尾. "J" | "j" ) echo echo "Mildred Jones" echo "249 E. 7th St., Apt. 19" echo "New York, NY 10009" echo "(212) 533-2814" echo "(212) 533-9972 fax" echo "milliej@loisaida.com" echo "Ex-girlfriend" echo "Birthday: Feb. 11" ;; # 后边的 Smith 和 Zane 的信息在这里就省略了. * ) # 默认选项. # 空输入(敲回车RETURN), 也适用于这里. echo echo "Not yet in database." ;; esac echo # 练习: # ----- # 修改这个脚本, 让它能够接受多个输入, #+ 并且能够显示多个地址. exit 0
说明:这个例子主要为大家演示了如何用case…esac语句产生菜单,让大家可以更形象、灵活的来学习case…esac语句的用法。
输出:
Contact List ------- ---- Choose one of the following persons: [E]vans, Roland [J]ones, Mildred [S]mith, Julie [Z]ane, Morris E Roland Evans 4321 Floppy Dr. Hardscrabble, CO 80753 (303) 734-9874 (303) 734-9892 fax revans@zzy.net Business partner & old friend
上面是输入E参数的输出,输入S或者Z,则会输出如下:
Contact List ------- ---- Choose one of the following persons: [E]vans, Roland [J]ones, Mildred [S]mith, Julie [Z]ane, Morris Z Not yet in database.
好了,关于Shell中分支语句case…esac的用法就先为大家介绍到这里,case…esac是一个非常强大的命令,大家可以用其来做非常多的事情,这篇文章仅仅只是入门作用,更多的需要大家在实际使用中多多尝试,多多练习。
更多Linux Shell教程请看:Linux Shell脚本系列教程
原文:Linux Shell系列教程之(十三)Shell分支语句case … esac教程
上一篇:Linux Shell脚本入门教程系列之(十二)Shell until循环
下一篇:Linux Shell脚本入门教程系列之(十四) Shell Select教程
本文转自:Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程
相关推荐
Shell教程入门 3 1、shell脚本 3 2、shell脚本实践 4 Shell变量 4 1、使用变量 5 2、只读变量 5 3、删除变量 5 4、变量类型 6 5、shell字符串 6 6、Shell数组 7 7、Shell注释 9 Shell传递参数 9 1、实例 9 Shell数组...
Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下: 代码如下: case 值 in 模式1) command1 command2 … commandN ;; 模式2) ...
大家好,今天给大家带来的是Shell编程之case语句的使用! 其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下: case 变量...
case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,case看起来更规范和易读 #case条件语句的语法格式 case 变量 in 值1) 指令1... ;; 值2) 指令2... ...
希望各位不要白piao,点个赞或者刷个评论再走,还有【禁止转载】 ...case/esac -> 就是java 中的switch as,以及在shell底层脚本中的使用 for/do/done -> 几种实用的for循环写法 while/do/done break和continue
shell中的 case in 用法 用法 case;in;esac都是shell关键字 expression是表达式(既可以是一个变量,一个数字,一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要可以得到expression的值就行) ...
shell中的case语句:可以把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。 使用格式:case 匹配母板 in模板1 [ | 模板2 ] … ) 语句组 ;;模板3 [ | 模板4 ] … ) 语句组 ;;esaccase...
终止 case 选项 代码如下:case “$variable” inabc) echo “\$variable = abc”;;xyz) echo “\$variable = xyz”;;esac4. .隐藏文件前缀.命令等价于source. 表示当前目录 .. 表示上一级目录正则表达式中作为单个...
5.3. case/esac 5.4. for/do/done 5.5. while/do/done 5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本的调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1...
很久没更新了,很久没看脚本了 想想应该继续看脚本了 #14 Formatting Long Lines #!/bin/sh # A version of fmt, using nroff. Adds two useful flags: -w X for line width # and -h to enable hyphenation for ...
5.3. case/esac 5.4. for/do/done 5.5. while/do/done 5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本的调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1...