2015-10-01 29 views
1

我想寫一個程序,其中程序會問你你的名字,確認你想要這個名字,然後檢查,看看你說是或否。我有「否」循環工作,它會再次要求一個名稱,但我試圖循環,如果您輸入除yes或no之外的任何其他字符,它將會顯示「請輸入yes或no」。然後詢問你是否要確認你的名字,然後再次檢查答案。這裏有我的。Bash:雖然循環錯誤

echo -e $WHITE"Name your$GREEN Hero$WHITE." 
read HERO 
clear 
echo -e "Are you sure you want your$GREEN Hero$WHITE's name to be$GREEN "$HERO"$WHITE? y/n" 
read ANSWER1 
while [ $ANSWER1 = "no" ]; do 
# 
# 
# 
clear 
echo -e $WHITE"Name your$GREEN Hero$WHITE." 
read HERO 
clear 
echo -e "Are you sure you want your$GREEN Hero$WHITE's name to be$GREEN "$HERO"$WHITE? y/n" 
read ANSWER1 
done 
    while [ $ANSWER1 != "yes" ] || [ $ANSWER1 != "no" ]; do 
# 
# 
# 
    clear 
    echo -e $WHITE"Please type yes or no." 
    sleep 1.5 
    clear 
    echo -e $WHITE"Are you sure you want your$GREEN Hero$WHITE's name to be$GREEN "$HERO"$WHITE?" 
    read ANSWER1 
    clear 
    done 
clear 
echo -e -n $WHITE"Loading" 
sleep 1.5 
echo -e -n "." 
sleep 1.5 
echo -e -n "." 
sleep 1.5 
echo -e -n "." 
sleep 1.5 
clear 
echo -e "Done." 

如果我去通過 「請輸入yes或no。」它會在睡眠時凍結而不清晰,因此不會顯示回聲並繼續循環。任何幫助或建議將不勝感激!

+1

擺脫使用ALL_CAPS_VARNAMES的習慣。有一天,你會[意外地使用'PATH = ...'](http://stackoverflow.com/questions/28310594/ls-not-found-after-running-read-path),並想知道爲什麼你的腳本打破了。 –

回答

2

這裏的問題:

while [ $ANSWER1 != "yes" ] || [ $ANSWER1 != "no" ]; do 

每一個可能的答案是不同的,以其中的至少一個。沒有字符串同時等於yesno。您需要&&而不是||

0

寫一個循環來獲取用戶輸入一個簡單的方法是select命令:

while true; do 
    read -p "${white}Name your ${green}Hero$white: " hero 

    echo "Are you sure you want your ${green}Hero$white's name to be $green\"$hero\"$white? " 
    select ans in Yes No; do 
     case $ans in 
      Yes) break 2 ;; # break out of both select and while loops 
      No) break ;; # only break out of select loop 
     esac 
    done 
done 

echo "Your ${green}Hero$white's name is $green\"$hero\"$white."