Sonntag, 20. Dezember 2009
Floats vergleichen in der Bash
Die Bash (test) kann an sich nur Ganzzahlen vergleichen, übergibt man eine Fließkommazahl, führt das zu einem Fehler.
So richtig Sinn macht das klarerweise erst mit Variablen:
if [ 12.3 -gt 12 ]; then echo '>'; fi
bash: [: 12.3: integer expression expected
Möchte man doch schnell mal zwei floats vergleichen, geht das ganz einfach mit bc. Zuerst interaktiv:
bash: [: 12.3: integer expression expected
xela@linux:~> bc bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. if (10.123 > 10.1119) 1 else 0 1 quitUm diese Art Test in einem Skript verwenden zu können, nehmen wir "echo" zum Übergeben an bc:
if [ $(echo "if (19 >= 19.00000) 1 else 0" | bc) -eq 1 ] ; then echo größergleich; else echo kleiner; fi
Wichtig dabei ist das "else 0", damit auf alle Fälle ein Integer (Ganzzahl) zurückgegeben wird, den test (also [ ) dann vergleichen kann.So richtig Sinn macht das klarerweise erst mit Variablen:
a='3.333'; b='3.2176'; if [ $(echo "if (${a} > ${b}) 1 else 0" | bc) -eq 1 ] ; then echo größer; else echo kleiner; fi
(Seite 1 von 1, insgesamt 1 Einträge)