Linux bash脚本上的奇怪错误

Linux bash脚本上的奇怪错误,linux,bash,function,recursion,Linux,Bash,Function,Recursion,警告:我最近刚开始学习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 = `ca

警告:我最近刚开始学习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 "=")

我不确定您的计算结果,但您的语法清理基本脚本如下:

#!/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

我不确定您的计算结果,但您的语法清理基本脚本如下:

#!/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)))它只为5工作,为3显示-6,为6显示0:(抱歉,您的代码是正确的,但var3=$((3*(var1-2)*var2))是错误的,它应该是$((3*var1)-(2*var2)))