Bash功能:一元运算符预期错误

时间:2016-02-14 18:58:04

标签: bash

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

2 个答案:

答案 0 :(得分: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对各种测试结构进行了很好的讨论,并举例说明。

答案 1 :(得分:1)

$checkbox_value = get_post_meta( get_the_ID(), 'compel_checkbox', true);
if($checkbox_value == 'on') {

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以及更多功能,请参阅[