1. 程式人生 > 實用技巧 >shell腳本系列:select語句

shell腳本系列:select語句

select in 迴圈用來增強互動性,它可以顯示出帶編號的選單,使用者輸入不同的編號就可以選擇不同的選單,並執行不同的功能。

#?用來提示使用者輸入選單編號;^D表示按下 Ctrl+D 組合鍵,它的作用是結束 select in 迴圈。

執行到 select 語句後,取值列表 value_list 中的內容會以選單的形式顯示出來,使用者輸入選單編號,就表示選中了某個值,這個值就會賦給變數 variable,然後再執行迴圈體中的 statements(do 和 done 之間的部分)。

每次迴圈時 select 都會要求使用者輸入選單編號,並使用環境變數 PS3 的值作為提示符,PS3 的預設值為#?

,修改 PS3 的值就可以修改提示符。

如果使用者輸入的選單編號不在範圍之內,例如上面我們輸入的 9,那麼就會給 variable 賦一個空值;如果使用者輸入一個空值(什麼也不輸入,直接回車),會重新顯示一遍選單。

注意,select 是無限迴圈(死迴圈),輸入空值,或者輸入的值無效,都不會結束迴圈,只有遇到 break 語句,或者按下 Ctrl+D 組合鍵才能結束迴圈。

格式

select variable in value_list
do
    statements
done

示例

#!/bin/bash

echo "What is your favourite OS?"
select name in "Linux" "Windows" "Mac OS" "UNIX" "Android"
do
    case $name in
        "Linux")
            echo "Linux是一個類UNIX作業系統,它開源免費,執行在各種伺服器裝置和嵌入式裝置。"
            break
            ;;
        "Windows")
            echo "Windows是微軟開發的個人電腦作業系統,它是閉源收費的。"
            break
            ;;
        "Mac OS")
            echo "Mac OS是蘋果公司基於UNIX開發的一款圖形介面作業系統,只能執行與蘋果提供的硬體之上。"
            break
            ;;
        "UNIX")
            echo "UNIX是作業系統的開山鼻祖,現在已經逐漸退出歷史舞臺,只應用在特殊場合。"
            break
            ;;
        "Android")
            echo "Android是由Google開發的手機作業系統,目前已經佔據了70%的市場份額。"
            break
            ;;
        *)
            echo "輸入錯誤,請重新輸入"
    esac
done