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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM