2017-10-28 57 views
1
function Lab() 
{ 
local result=0 
echo 

echo 'Please enter your overall percentage for your labs (40% possibility)' 
read result 

if [ $result != 40 ] || [ $result -lt 0 ] 
then 
    echo "You have entered a invalid value, please try again." 
    Lab #I thought this would call the function again, resetting itself 
else 
    return $result 
fi 
} 

我基本上希望此函數只能取0-40的值。除此之外的任何值都會導致函數重新啓動,直到給出真值。我對bash非常陌生,我一直在試圖在過去的一天中解決這個問題。如果任何人有任何建議,可以推動我在正確的方向,這將是偉大的!函數在某些條件下調用自己,BASH

+1

這裏似乎沒有任何PHP。猜測它應該是'if [$ result> 40] || [$ result <0]'因爲'!= 40'幾乎也是每個有效值(0-39)。 – chris85

回答

3

不需要遞歸;只需使用一個while循環。此外,函數的return值不用於返回數據,僅用於返回退出狀態。要麼設置一個全局變量,要麼將結果寫入標準輸出。

lab() { 
    echo 
    echo 'Please enter your overall percentage for your labs (40% possibility)' 
    IFS= read -r result 

    while [ "$result" -gt 40 ] || [ "$result" -lt 0 ]; do 
    echo "You have entered a invalid value, please try again." 
    IFS= read -r result 
    done 

    echo "$result" 
} 
+1

如果我想將這個變量存儲到我的主程序中,可以通過輸入「lab」來調用函數,然後將函數中的變量與「LAB = $(lab)」一起存儲「 – DavidY

+0

正確; '$(...)'是一個*命令替換*;該命令的輸出被捕獲並以與使用參數擴展相同的方式使用。 – chepner