2016-02-14 43 views
0

我正在學習bash腳本,並且當前在函數內部有一個if語句。以下代碼返回兩個錯誤;兩者都參考ifelif條件並且說[: 12000: unary operator expectedBash函數:一元運算符預期錯誤

function calculateBonus { 
    # If the sales figure is greater than 1 million, bonus is £1500 
    if [ $1 >= 1000000 ] 
    then 
     bonus=1500 
    # If greater than 100000, bonus is £750 
    elif [ $1 >= 100000 ] 
    then 
     bonus=750 
    else 
     bonus=0 
    fi 

    # Return the bonus figure 
    return $bonus 
} 

read sales 
bonus=$(calculateBonus $sales) 

我已經嘗試使用雙方括號,但由於某種原因,我給了一個語法錯誤。有人可以解釋上述錯誤的原因以及當我使用[[ some_condition ]]而不是[ some_condition ]時的語法錯誤。

+0

IIRC更大平等的操作符不是'> ='而是'-ge'。看看'man test'('test'應該和'''相同' –

回答

2

試試這個:

function calculateBonus() { 
    if (($1 >= 1000000)); then 
     bonus=1500 
    elif (($1 >= 100000)); then 
     bonus=750 
    else 
     bonus=0 
    fi 
} 

read sales 
calculateBonus "$sales" 
echo "Bonus is $bonus" 

(())是算術評估。該函數設置變量bonus,該函數可以在函數調用後使用。函數中的return不會執行您可能認爲它的操作(它是退出代碼)。另請參閱this article關於從函數返回值。

This article對各種測試結構和示例有很好的討論。

+0

感謝e0k,非常全面,回答了我的另一個問題 – ryansin

1
function calculateBonus { 
# If the sales figure is greater than 1 million, bonus is £1500 
if [ $1 -ge 1000000 ] 
then 
    bonus=1500 
# If greater than 100000, bonus is £750 
elif [ $1 -ge 100000 ] 
then 
    bonus=750 
else 
    bonus=0 
fi 

} 

read sales 
calculateBonus $sales 
echo $bonus 

-ge =>大於或等於

看到man test其是相同[help [指示您man test

<>用於在bash(字符串比較字典/辭書order)

注意:bash還有一個先進的if條件運算符[[,它具有所有fea的test[加上更多功能,見help [[

+0

啊,我看到了,非常感謝它對它進行了排序。與此分開;當我回復$獎金時,它不迴應任何內容。爲什麼calculateBonus的返回值未分配給$ bonus? – ryansin

+0

不需要退貨,你可以直接使用獎金 – ritesht93

+0

在這種情況下,我可以。但是如果我需要將一個值返回給變量而不是僅僅回顯它,那麼爲什麼上述不起作用呢? – ryansin

相關問題