本文是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教程