2016-02-14 41 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

相关问题