2017-06-01 4 views
0

Ich habe ein Problem mit dem Befehl bc. Der Ausgang erzeugt ist:Syntaxfehler Bash-Befehl bc

(standard_in) 2: syntax error 

Hier ich meinen Code schreiben, werden alle Vorschläge geschätzt.

value="100%"   # the threshold to cause a break out 
kb="kB/s" 
mb="MB/s"    # strings to mask out 
conversor=1024  # kb->mb conversion 
contador=0   # initalize our total in megabytes 
for ((x=3; x<=${#array[@]}; x+=5)); do 
    paraula=${array[$x]}; 

    if [[ $paraula =~ .*kB.* ]]; then 
     paraula=${paraula%$kb} 
     paraula=$(echo "scale=4; $paraula/$conversor" | bc) # convert to $mb 
     contador=$(echo "scale=4; $contador+$paraula" | bc) 
     echo "Counting: "$contador 
    else 
     paraula=${paraula%$mb} 
     contador=$(echo "scale=4; $contador+$paraula" | bc) 
     echo "Counting: "$contador 
    fi 

    if [[ " ${array[$x]} " =~ " $value " ]]; then 
     break; 
    fi 
    echo "Value : ${array[$x]} "; 

done 

echo "final value: $contador" 

dann der Fehler auf dem Terminal nach Ausführung des Skripts ist

error

+1

Können Sie dies zu einem [mcve] vereinfachen? Sie können wahrscheinlich den gleichen Fehler von einer einzelnen Codezeile erhalten, die nur 'bc' aufruft. –

+0

Verwenden Sie 'bash -x yourscript ', um alles zu protokollieren, was das Skript tut, um den Ort zu finden, an dem es zum ersten Mal schief geht. Wenn Sie möchten, dass die Verfolgung etwas einfacher ist, können Sie PS4 einen Wert zuweisen, der die Zeilennummer enthält. Zum Beispiel könnten Sie alle auf einer Zeile ausführen: 'PS4 = ': $ {LINENO} +' bash -x yenscript '. (Beachten Sie, dass 'PS4' aus Sicherheitsgründen in sehr neuen bash-Versionen innerhalb Ihres Skripts gesetzt werden muss, wenn das Skript als root ausgeführt wird). –

+0

BTW, fügen Sie bitte die oben angefragten Protokolle als Text zur Frage hinzu, nicht Screenshots. Siehe die akzeptierte Antwort zu [Warum nicht Bilder von Code auf SO hochladen, wenn Sie eine Frage stellen?] (Https://meta.stackoverflow.com/a/285557/14122) –

Antwort

0

Das Problem Ihre letzte Zeile ist nicht eine neue Zeile in ihm hat, wenn sie auf bc geleitet.

Das funktioniert gut.

$ echo "scale=4; 2046/1024" | bc 
1.9980 
$ echo -e "scale=4; 2046/1024\n" | bc 
1.9980 

Dies ist pleite

$ echo -n "scale=4; 2046/1024" | bc 
(standard_in) 1: syntax error 

Ich glaube, Sie

ändern
contador=$(echo -e "scale=4; $contador+$paraulao\n" | bc) 

Das es beheben sollte. Einrücken und Kommentare hinzufügen.

+0

Die Option '-e' ist unnötig (ich hoffe * es gibt keine Zeichen mit Escape-Zeichen, die Zahlen enthalten sollten). – chepner

+0

@chepner das '-e' wird für \ n benötigt. – SaintHax

+0

Warum verwenden Sie die Nicht-Standard-Option "-e", um den impliziten Newline-Code zu unterdrücken, nur um ihn explizit hinzuzufügen? – chepner