`
天梯梦
  • 浏览: 13630170 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

Linux Shell脚本入门教程系列之(十三)Shell分支语句case … esac教程

 
阅读更多

本文是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脚本学习手册

    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语句简明教程

    Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下: 代码如下: case 值 in 模式1)  command1  command2  …  commandN  ;; 模式2)  ...

    Shell编程之case语句实战(小结)

    大家好,今天给大家带来的是Shell编程之case语句的使用! 其实case语句还是很好理解的,在shell编程中,if语句有它的语法,函数也有它的语法,那么在我们shell编程中的case语句也是有它的语法的,如下: case 变量...

    详解shell脚本中的case条件语句介绍和使用案例

    case条件语句我们常用于实现系统服务启动脚本等场景,case条件语句也相当于if条件语句多分支结构,多个选择,case看起来更规范和易读 #case条件语句的语法格式 case 变量 in 值1) 指令1... ;; 值2) 指令2... ...

    【shell】shell脚本语法

    希望各位不要白piao,点个赞或者刷个评论再走,还有【禁止转载】 ...case/esac -> 就是java 中的switch as,以及在shell底层脚本中的使用 for/do/done -> 几种实用的for循环写法 while/do/done break和continue

    shell中的 case in 用法

    shell中的 case in 用法 用法 case;in;esac都是shell关键字 expression是表达式(既可以是一个变量,一个数字,一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要可以得到expression的值就行) ...

    shell中case的用法学习笔记

    shell中的case语句:可以把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪部分代码。 使用格式:case 匹配母板 in模板1 [ | 模板2 ] … ) 语句组 ;;模板3 [ | 模板4 ] … ) 语句组 ;;esaccase...

    shell脚本中28个特殊字符的作用简明总结

    终止 case 选项 代码如下:case “$variable” inabc) echo “\$variable = abc”;;xyz) echo “\$variable = xyz”;;esac4. .隐藏文件前缀.命令等价于source. 表示当前目录 .. 表示上一级目录正则表达式中作为单个...

    Linux C 一站式学习

    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...

    Formatting Long Lines 格式化多行字符的shell脚本

    很久没更新了,很久没看脚本了 想想应该继续看脚本了 #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 ...

    宋劲彬的嵌入式C语言一站式编程

    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...

Global site tag (gtag.js) - Google Analytics