Im Anschluss an Dennis Antwort auf:
Obwohl seine Antwort richtig für Dezimalstellen ist, bash wirft (standard_in) 1: Syntaxfehler mit Fließkommaarithmetik.
result1=12
result2=1.27554e-05
if (($(echo "$result1 > $result2" | bc -l))); then
echo "r1 > r2"
else
echo "r1 < r2"
fi
Dies gibt falsche Ausgabe mit einer Warnung, obwohl mit einem Beendigungscode 0.
(standard_in) 1: Syntaxfehler
r1 r2 <
Während keine besteht Klare Lösung dazu (Diskussion thread 1 und thread 2), habe ich folgenden Teil Fix durch Runden von Fließkomma Ergebnisse mit awk
gefolgt von der Verwendung von bc
Befehl wie in Dennis Antwort und this thread
Runden auf eine gewünschte Dezimalstelle: Im folgenden wird rekursive Verzeichnis Platz in TB mit Abrundung auf der zweiten Dezimalstelle.
result2=$(du -s "/home/foo/videos" | tail -n1 | awk '{$1=$1/(1024^3); printf "%.2f", $1;}')
Sie können dann bash Arithmetik wie oben oder mit [[ ]]
Gehäuse wie in following thread verwenden.
if (($(echo "$result1 > $result2" | bc -l))); then
echo "r1 > r2"
else
echo "r1 < r2"
fi
oder mit -eq
Operator wo bc
Ausgabe von 1 wahr und 0 ist falsch
if [[ $(bc <<< "$result1 < $result2") -eq 1 ]]; then
echo "r1 < r2"
else
echo "r1 > r2"
fi
Was die Fehler? einen Variablennamen falsch geschrieben. – ormaaj
tatsächlich sind die Fehler auf einige andere Probleme zurückzuführen. Das funktioniert gut. –
Was meinen Sie mit 'Dezimalwerte'? Meinst du ganze Zahlen in Basis 10, oder meinen Sie Zeichenfolgen, die nicht ganzzahlige reelle Werte darstellen? –