本文是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系列教程
- 版權聲明:本站原創文章,於4個月前,由Linux大學(Linuxdaxue.com)發表,共 2292字。
- 轉載請注明:Linux Shell系列教程之(十三)Shell分支語句case … esac教程 | Linux大學

