2012-11-18 54 views
4

我是小白到shell腳本,我想知道這一點:循環if語句

#!/usr/local/bin/bash 
number=5 
echo "Enter 'yes' to continue, 'no' to abort:" 
read choice 
if [ $choice = yes ]; then 
     while [ $number -lt 10 ]; do 
       echo "The script is now looping!" 
     done 
elif [ $choice = no ]; then 
     echo "Loop aborted" 
else 
     echo "Please say 'yes' or 'no'" 
     read choice 
# What now? 
fi 

我怎麼會去的if語句重新檢查$選擇(第13行),如果你不要指定「是」或「否」?

謝謝。

回答

2
  1. 你可以把代碼從「echo Enter ...」放到fi的外部「while」循環中。 while循環會循環直到$ choice爲「yes」或「no」。這樣做時刪除最後一個「else」子句(這將是多餘的)。

  2. P.S.您需要在內部while循環中增加(或更改)$數字。否則,它將無限運行。

+0

得到它的工作。謝謝! :) – Jordanss10

2

你可以在一個名爲invalid_choice

invalid_choice=true 
while $invalid_choice; do 
    read choice 
    if [ "$choice" = "yes" ]; then 
     invalid_choice=false 
     ... 
    elif [ "$choice" = "no" ]; then 
     invalid_choice=false 
     ... 
    else 
     echo "Please say yes or no" 
done 

變量保持環是否跟蹤或者你可以概括成一個功能,如果你需要做這個有很多:

function confirm() { 
    local ACTION="$1" 
    read -p "$ACTION (y/n)? " -n 1 -r -t 10 REPLY 
    echo "" 
    case "$REPLY" in 
     y|Y) return 0 ;; 
     * ) return 1 ;; 
    esac 
} 

confirm "Do something dangerous" || exit