2011-03-15 66 views
0

我想從用戶那裏得到輸入,可以是任何給定的選項,我試過用選擇,但是它只是循環進入,不出來,有沒有辦法可以讓它出來,並進行用戶輸入了正確的選擇後,這裏是示例代碼:如何在Linux中選擇出來

select envir in "prod" "uat" "dev"; do 
    echo $envir 
done 

//continue with the script 
echo "out of select" 

一旦用戶選擇任何可用的選項,就應該站出來,並繼續腳本,如果用戶輸入了其他東西,它應該繼續提示。

回答

2

從慶典(1)手冊頁:

...直到執行中斷命令在每次選擇後執行 列表。 select的退出狀態是 列表中執行的最後一個命令的退出狀態,如果沒有命令被執行,則退出狀態爲零。 ...

換句話說,當$ envir非空時執行「break」語句。

3
select envir in "prod" "uat" "dev"; do 
    echo $envir 
    if [ $envir == "prod" ] || [ $envir == "uat" ] || [ $envir == "dev" ] 
    then 
     break 
    fi 
done 

//continue with the script 
echo "out of select" 
1

我會寫上面的腳本是這樣的:

#!/bin/bash 
declare -a opts=("prod" "uat" "dev") 

echo "control-D to exit" 
select envir in "${opts[@]}"; do 
    echo "envir=$envir" 
    found=0 
    for elem in "${opts[@]}"; do 
     if [ "$elem" = "$envir" ]; then 
      found=1 
      break 
     fi 
    done 
    if [ "$found" -eq 1 ]; then 
     break 
    fi 
done 

echo "out of select" 

這樣,你的關鍵字在一個地方處理。每當你在「prod」「uat」「dev」列表中添加一個新單詞時,你不需要在2個地方改變。

您還可以從外部文件中讀取單詞列表,並將其分配給bash數組變量opts。

0

謝謝Brian。隨着你的輸入,這是我能夠做到的:

相關問題