本文也即《Learning the bash Shell》3rd Edition的第五章Flow Control之讀書筆記之四,但我們將不限於此。flow control是任何程式設計語言中很常用的部分,也包括了case。在這裡,我們將繼續學習他們。
select和其他流量控制不一樣,在C這類變成語言中沒有類似的語句(C中的select用於socket,是完全不同的含義,不是流量控制)。格式如下:
select
name
[in
list
]
do
statements that can use $name...
done
和for的格式相似,有和for一樣,可以刪除in list,即使用預設的in $@。通過select,我們很容易建立菜單:
執行時的時候,會根據list給出菜單,使用者選擇之後執行statement,所選擇的,放置在$name,執行完之後,再次給出菜單,等等使用者執行,一直迴圈下去,使用者如果向跳出迴圈,可以使用break,下面是一個基本例子:
# select Test Sample
# Test 1: Basic Usage Test
function test
{
echo 'select test 1'
mystack='a 123 red '
select entry in $mystack; do
#如果是有效選擇,則$entry中帶有list中的值,如果是無效的選擇,則為null,因此經常會根據此判斷選擇是否有效,例如用if [ $entry ]。
if [ $entry ]; then
echo "You select the choice '$entry'"
break
**註:由於select是個迴圈,通過break來跳出迴圈
else
echo "Invaild selection"
fi
done
}
test
執行結果
$./select-test
select test 1 **註:下面開始顯示list中元素,並以菜單的方式出現*
1) a
2) 123
3) red
#?
h **註:出現提示符號#?,等待使用者輸入選擇,如果直接斷行符號,則再次顯示菜單
Invaild selection
#?
3
You select the chioce 'red'
在Linux Bash Shell學習(五):特殊檔案、別名、選項和參數
中對於提示符,提到了PS1和PS2,在select中,給出的提示符,即上面例子中的#?就是PS3,我們可以在shell中對PS3進行重新定義。例如PS3=”Please select a choice : ”
執行完statement,將繼續出現提示符,等待下次輸入,如果需要從select的迴圈中退出來,使用break。如果直接鍵入[斷行符號],則再次顯示菜單。
相關連結: 我的Linux操作相關文章