2012-03-26 9 views
0

Warnung: Ich habe gerade angefangen bash vor kurzem lernen und zu versuchen, eine rekursive Funktion zu tun, die eine Laufzeit berechnen wird ... so ...seltsame Fehler auf Bash-Skript

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

Die Funktion, die ich bisher geschrieben habe, ist:

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

Aber ich habe einige seltsame Fehler ... und nicht sicher, ob ich es richtig gemacht ... kann Wer sagt mir, was diese Probleme verursacht und meinen Code korrigiert, damit er funktioniert? Ich danke dir sehr.

Fehler:

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 "=") 

Antwort

3

Nun nicht sicher über Ihre Berechnung aber Ihre syntaktisch Basis Skript aufgeräumt ist diese:

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

es funktioniert nur für 5, 3 es zeigt -6 und für 6 Es zeigt 0. :-( – FinalDestiny

+0

Entschuldigung, Ihr Code ist korrekt aber var3 = $ ((3 * (var1-2) * var2)) ist falsch, es sollte $ (((3 * var1) - (2 * var2))) – FinalDestiny

+0

Wie auch immer, du hast mir geholfen, viel zu lernen, vielen Dank. – FinalDestiny