Vergleich von integer-und floating-point-zahlen in shell-Skript
Shell-Skript, wie können wir vergleichen (integer und floating point) ,(flaoting-point und floating point),(floating point und integer),(integer und integer) mit nur einer if-Bedingung.
habe ich einige Beispiele, wie
set X=3.1
set Y=4.1
if [ $X < $Y ] then
echo "wassup"
endif
Aber laufen die oben genannten cron-job, der nicht zu funktionieren scheint.
Mögliche Duplikate von Bash: Ganzzahliger Ausdruck erwartet
InformationsquelleAutor Rajeev | 2012-03-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Durchführung von Fließkomma-Operationen in der bash ist die Verwendung bc, die verfügbar ist auf fast allen linux-Distributionen.
Gibt es eine guter Artikel linux journal über die Gleitkomma-Mathematik in der bash mit bc.
interessant. Ich habe es funktioniert hier gut. Hmmm. Was deine Fehlermeldung bedeutet (glaube ich) ist, dass die
$(echo "$a > $b" | bc)
nicht einen Wert zurückgeben. Können Sie versuchen, die subshell auf seine eigene?IE: Deine Variablen sind nicht richtig zugeordnet.
echo $X
wird eine leere Zeile, zum Beispiel.InformationsquelleAutor brice
Bah selbst verarbeitet nur zahlen. Mit bc:
Müssen Sie nicht sorgen zu machen über die Skala. Es ist nur für die preocision von Ausgabe-Formate:
InformationsquelleAutor user unknown
folgende Beispiel funktioniert auf die bash-shell.
möchten Sie vielleicht zu erfahren, shell-Skript hier
$ test "34.4" -gt "5.4" -> bash: test: 34.4: integer expression expected
dies ist getestet unter solaris 10 und bash-shell
Ich zweifle nicht daran, Ihre Aufrichtigkeit 🙂 ich sage nur, dass dies nicht garantiert, um zu arbeiten auf Linux
bash --version
gibt mirGNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)
InformationsquelleAutor Balaswamy Vaddeman
BEARBEITEN. basierend auf die Kommentare zu dieser Antwort (Dank auch an user unknown und glenn jackman), es scheint, dass bei der Verwendung von
bc
für eine true/false test, der erforderlichbash
test ist einfach:(( $(echo "$X < $Y" |bc) ))
... siehe test-script untenwährend der Vergleich zur
-ne 0
ist nötig für die old-style-bash[ ]
test.bash
nicht nativ verarbeiten floating-point-zahlen, aber Sie können rufen Sie ein Dienstprogramm wiebc
Vom
man bc
- Eine willkürliche precision calculator languageTEST-Ergebnisse:
TEST-Skript:
scale
ist überflüssig, wenn Sie nur wollen, um zu testen, true und false.!=0
ist überflüssig zu - das ist, was ist bereits getan.unbekannt: Danke..
Die
!=0
ist nicht überflüssig: bc Drucke, 0 oder 1 für wahr oder falsch). In beiden Fällen, die exit-status ist null. Sie müssen also vergleichen Sie die Ausgabe des Befehls zu etwas.Nette Idee, aber falsch:
if (($(echo "$X > $Y" | bc))) ; then echo wassup; else echo pussaw; fi
. Grund: $(...) nimmt die Ausgabe. ((...)) bewertet.Es scheint, Sie sind beide Recht, für die verschiedenen Formate 🙂 ... ich habe tests auf meine Antwort.
InformationsquelleAutor Peter.O