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

本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程

分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使用switch ... case格式,但是在Shell却没有switch ... case,不过别担心,Shell是支持分支语句的,只不过使用case ... esac格式而已。二者在本质上是相同的。

Shell分支case

一、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系列教程

 

posted @ 2016-09-13 14:25  waitig  阅读(12067)  评论(0编辑  收藏  举报
友情链接:Linux大学 Linux学习网 Linux教程 战神之王 战神之王在线阅读 道君在线阅读AB小说网