Ich habe ein Backup-Skript auf meinem Server, die Cron-Aufträge von Sicherungen, und sendet mir eine Zusammenfassung der gesicherten Dateien, einschließlich der Größe der neuen Sicherungsdatei. Als Teil des Skripts möchte ich die endgültige Größe der Datei durch (1024^3) teilen, um die Dateigröße in GB von der Dateigröße in Bytes zu erhalten.Floating Point Ergebnisse in Bash Integer-Division
Da Bash keine Fließkommaberechnung hat, versuche ich, Pipes zu BC zu verwenden, um das Ergebnis zu erhalten, aber ich bin über grundlegende Beispiele ratlos.
Ich habe versucht, den Wert von Pi zu einer Skala zu bekommen, aber
obwohl die folgenden Werke:
~ #bc -l
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
4/3
1.33333333333333333333
22/7
3.14285714285714285714
q
0
quit
Eine nicht interaktive Version nicht funktioniert:
#echo $((22/7)) | bc
3
Dies funktioniert:
#echo '22/7' | bc -l
3.14285714285714285714
Aber ich muss Variablen verwenden. So tut es helfen, dass die folgende nicht funktioniert:
#a=22 ; b=7
#echo $((a/b)) | bc -l
3
Ich bin offensichtlich etwas in der Syntax fehlt für Variablen in Bash verwendet und mit einigen ‚Zeiger‘ verwenden könnte, was ich falsch verstanden habe.
Wie DigitalRoss sagte, kann ich folgendes verwenden:
#echo $a/$b | bc -l
3.14285714285714285714
aber ich komplexe Ausdrücke wie verwenden kann nicht:
#echo $a/(($b-34)) | bc -l
-bash: syntax error near unexpected token `('
#echo $a/((b-34)) | bc -l
-bash: syntax error near unexpected token `('
#echo $a/((b-34)) | bc -l
-bash: syntax error near unexpected token `('
Kann mir jemand eine funktionierende korrekte Syntax für Gleitkomma-Ergebnisse immer mit komplizierte arithmetische Ausdrücke?
Es ist möglich, bash z. Ganzzahlige Division mit Fließkomma-Ergebnissen: Siehe: http://stackoverflow.com/a/24431665/3776858 – Cyrus