歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux Shell腳本入門教程系列之(十三)Shell分支語句case … esac教程

Linux Shell腳本入門教程系列之(十三)Shell分支語句case … esac教程

日期:2017/3/3 12:02:38   编辑:SHELL編程
本文是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 "[email protected]"  
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 "[email protected]"  
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
[email protected]
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教程
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Copyright © Linux教程網 All Rights Reserved