Bash函数:一元运算符预期错误

Bash函数:一元运算符预期错误,bash,Bash,我正在学习bash脚本,目前在函数中使用if语句时遇到了问题。下面的代码返回两个错误;它们都引用了if和elif条件,并表示[:12000:预期的一元运算符 function calculateBonus { # If the sales figure is greater than 1 million, bonus is £1500 if [ $1 >= 1000000 ] then bonus=1500 # If greater than

我正在学习bash脚本,目前在函数中使用
if
语句时遇到了问题。下面的代码返回两个错误;它们都引用了
if
elif
条件,并表示
[:12000:预期的一元运算符

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\u condition]]
而不是
[some\u condition]
时出现语法错误的原因吗

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
=>大于或等于

请参见与
[
相同的
人工测试,
帮助[
指导您进行
人工测试

用于bash(字典/词典顺序)中的字符串比较

注意:bash还有一个高级if条件操作符
[[
,它具有
test
[
以及更多功能,请参阅
帮助[[

-ge
=>大于或等于

请参见与
[
相同的
人工测试,
帮助[
指导您进行
人工测试

用于bash(字典/词典顺序)中的字符串比较

注意:bash还有一个高级if条件操作符
[[
,它具有
测试
[
以及更多功能,请参阅
帮助[[[

尝试以下操作:

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
,该变量可在调用函数后使用。函数中的
返回值
与您可能认为的不一样(它是退出代码)。另请参阅关于从函数返回值

对各种测试结构进行了很好的讨论,并举例说明。

尝试以下方法:

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
,该变量可在调用函数后使用。函数中的
返回值
与您可能认为的不一样(它是退出代码)。另请参阅关于从函数返回值


对各种测试结构进行了很好的讨论,并举例说明。

IIRC更大相等的运算符不是
=
,而是
-ge
。查看
人工测试
测试
应与
[
相同)IIRC更大相等的运算符不是
=
,而是
-ge
。查看
人工测试
测试
应与
[
相同)啊,我明白了,非常感谢对其进行排序。与此分开,当我回显$bonus时,它不会回显任何内容。为什么CalculateBunus的返回值没有分配给$bonus?在这种情况下,是的,我可以。但是如果我需要将值返回到变量而不是仅仅回显它,为什么上面的操作不起作用?啊,我明白了,非常感谢对其进行了排序。与此分开;当我回显$bonus时,它不会回显任何内容。为什么CalculateBunus的返回值没有指定给$bonus?在这种情况下,是的,我可以。但是如果我需要将值返回到变量而不是仅仅回显它,为什么上面的操作不起作用?谢谢e0k,非常全面,并回答了我的另一个问题谢谢e0k,非常感谢综合回答了我的另一个问题