【问题标题】:strange errors on bash scriptbash脚本上的奇怪错误
【发布时间】:2012-03-26 21:36:41
【问题描述】:

警告:我最近才开始学习 bash,并尝试做一个递归函数来计算一个术语......所以......

x0 = 0 x1 = 1 xm = 3 * xm-1 - 2 * xm-2

目前我写的函数是:

#!/bin/bash
calculate()
{
 if [ $1 -eq 0 ]
 then
 echo "0"
 fi
 if [ $1 -eq 1 ]
 then
 echo "1"
 fi
 if [ $1 -ge 1 ]
 then
 let var1 = `calculate [ $1-1 ]`;
 let var2 = `calculate [ $1-2 ]`;
 let var3 = 3*var1-2*var2;
 echo var3
fi
}
calculate 3

但是我遇到了一些奇怪的错误...不确定我是否正确执行...谁能告诉我导致这些问题的原因并更正我的代码以使其正常工作?非常感谢。

错误:

TP1p1.sh: line 4: [: [: integer expression expected
TP1p1.sh: line 8: [: [: integer expression expected
TP1p1.sh: line 12: [: [: integer expression expected
TP1p1.sh: line 14: let: =: syntax error: operand expected (error token is "=")
TP1p1.sh: line 4: [: [: integer expression expected
TP1p1.sh: line 8: [: [: integer expression expected
TP1p1.sh: line 12: [: [: integer expression expected
TP1p1.sh: line 15: let: =: syntax error: operand expected (error token is "=")
TP1p1.sh: line 16: let: =: syntax error: operand expected (error token is "=")

【问题讨论】:

    标签: linux bash function recursion


    【解决方案1】:

    不确定你的计算,但你的语法清理的基本脚本是这个:

    #!/bin/bash
    calculate() {
     if [ $1 -eq 0 ]; then
        echo -n "0"
     elif [ $1 -eq 1 ]; then
        echo -n "1"
     elif [ $1 -ge 1 ]; then
        var1=$( calculate $(($1-1)) )
        var2=$( calculate $(($1-2)) )
        var3=$((3*(var1-2)*var2))
        echo $var3
    fi
    }
    calculate 5
    

    【讨论】:

    • 它只适用于 5,对于 3 它显示 -6,对于 6 它显示 0。:-(
    • 对不起,你的代码是正确的但是 var3=$((3*(var1-2)*var2)) 是错误的,应该是 $(( (3*var1) - (2*var2) ) ))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多