我目前正在學習bash,如果值不是預期的,我正在使用循環函數來調用函數。循環函數bash
我創建了一個小功能
#!/bin/bash
find_number(){
echo "Enter number"
read number
if [ ! $number == 1 ]; then
echo is not 1, enter number again
find_number
fi
echo "Got it"
}
find_number
如果輸入了一個錯誤的值就重啓功能,並創建一個循環,但唯一的問題是,該功能循環本身,當它繼續終於返回的回聲作爲很多時候你錯了。
例:
Enter number
5
is not 1, enter number again
Enter number
5
is not 1, enter number again
Enter number
1
Got it
Got it
Got it
正如你看到這裏,我已經得到了結果的3倍。 要解決此問題,我以另一種方式寫了我的代碼。
#!/bin/bash
find_number(){
echo "Enter number"
while read number; do
if [ ! $number == 1 ]; then
echo is not 1, enter number again
else
break
fi
done
echo "Got it"
}
find_number
我的問題是......我是通過應用第二種方法來做正確的方法,還是有另一種方法呢?
感謝您的反饋
僅供參考,'=='不是POSIX標準化'測試'功能的一部分;標準的字符串比較運算符是'='。並且總是引用你的擴展 - '! [「$ number」= 1]'更不容易出現意外;考慮如果用戶輸入'23 = 23 -o 5'會發生什麼;你會得到'[! 23 = 23 -o 5 == 1]'。 –
當你想檢查一些東西不等於bash中的int時,使用'if [$ number!= 1]'。它更具可讀性。 – Vinny
@Vinny,錯誤,重新:「到一個int」 - 這是字符串比較,而不是數字比較。 ('='也是字符串比較;如果我們確定這些值是在同一個基礎中,並且沒有前導零,那麼直到我們開始做比較或比對比更少的時候,這並不重要)。 –