【问题标题】:Bash Function: Unary Operator Expected errorBash 函数:一元运算符预期错误
【发布时间】:2016-02-15 03:22:05
【问题描述】:

我正在学习 bash 脚本,目前在函数中使用 if 语句时遇到问题。以下代码返回两个错误;两者都引用ifelif 条件并说[: 12000: unary operator expected

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 ] 时,有人可以解释上述错误的原因以及语法错误。

【问题讨论】:

  • IIRC 更大相等的运算符不是>=,而是-ge。查看man testtest应该和[一样)

标签: bash


【解决方案1】:

试试这个:

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 对各种测试结构进行了很好的讨论,并附有示例。

【讨论】:

  • 谢谢e0k,非常全面,回答了我的另一个问题
【解决方案2】:
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中的字符串比较(字典/字典顺序)

注意:bash 还具有高级 if 条件运算符 [[,它具有 test[ 的所有功能以及更多功能,请参阅 help [[

【讨论】:

  • 啊,我明白了,非常感谢它的排序。与此分开;当我回显 $bonus 时,它不会回显任何内容。为什么calculateBonus的返回值没有赋值给$bonus?
  • 在这种情况下是的,我可以。但是如果我需要将一个值返回给一个变量而不是仅仅回显它,为什么上面的方法不起作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多