• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Perl-Conditionals in Bash-Script auswerten

Xero

Member
Hallo Leute,

irgendwie hab ich gerade ne Sperre. Ich hoffe einer von euch kann mir helfen.

Ich programmiere ein kleines Bash-Script. Aber muss darin mit Kommazahlen rechnen. Also rufe ich wenn ich es brauche perl -e "command" auf.
Das Problem ist dass ich mich mit Perl kaum auskenne. Ich bekomme es zwar hin damit zu Rechnen (Grundrechenarten etc.), aber was ich noch brauche, ist ein Vergleich zweier Zahlen. Genauer ein "kleiner als" Vergleich. Ich weiß zwar, dass der Operator < ist, aber nicht wie ich ihn einbinde. Denn mein Problem ist, der Befehl muss dann im einen Fall was zurückgeben und im anderen was anderes. Was ist eigentlich egal. Hauptsache ich kann es in der bash verwerten.

Also muss z.B. Perl x zurückgeben, wenn A < B,
und y, wenn A >= B.

Entschuldigt wenn das ganze nen bisschen blöd klingt, aber ich sitzt schon nen weilchem vor´m Rechner heute :?
 

regexer

Advanced Hacker
Xero schrieb:
Also muss z.B. Perl x zurückgeben, wenn A < B,
und y, wenn A >= B.
Wenn man A und B exportiert, kann man über das perl-hash %ENV darauf zugreifen:
Code:
export A=1.511111 B=1.54256   # Punkt als Dezi-Trenner!!
perl -e 'if ($ENV{A}<$ENV{B}) { print "x" } else { print "y" }'
Wenn du sie nicht exportierst, kann man es auch so machen:
Code:
A=1.511111 B=1.54256
perl -e "if ($A < $B) { print 'x' } else { print 'y' }"
Wichtig sind hier die anderen Hochkommas. $A und $B wird dann von der Shell ersetzt, bevor der ganze command an perl übergeben wird.

Alles klar?
 

regexer

Advanced Hacker
Xero schrieb:
Ich programmiere ein kleines Bash-Script.
Was ich jetzt vor lauter perl gar nicht in Betracht gezogen habe: Es geht natürlich auch mit der bash.
Code:
A=1.511111 B=1.54256
if [[ $A < $B ]]
then
  echo x
else
  echo y
fi
In perl könnte man natürlich noch viel kompliziertere Abfragen machen. Ist vielleicht auch nicht schlecht, wenn man weiß, wie das geht ...
 

TeXpert

Guru
und nur weil Du mit Fließkommazahlen rechnen willst braucht man doch nicht gleich diese komische Sprache mit p, die keiner lesen kann, dafür nimmt man 'bc' und wird glücklich :)
 

taki

Advanced Hacker
TeXpert schrieb:
...braucht man doch nicht gleich diese komische Sprache mit p, die keiner lesen kann...

Ob man ein Perlscript hinterher noch lesen kann, liegt an einem selbst... Kommt immer drauf an, was man möchte:

8) Die eierlegende Einzeilen Wollmilchsau oder ein lesbares Script, welches man nach einem Jahr noch versteht und dann noch erweitern kann.

:arrow: Jetzt halt ich den Mund, gehört schließlich nicht hierher...

Ähmm. Fürs Berechnen von Zahlenwerten in einem Bashscript geb ich Dir recht, dafür ist bc ja auch da.
 

regexer

Advanced Hacker
TeXpert schrieb:
dafür nimmt man 'bc' und wird glücklich :)
Habe mal nach "bc" gegoogelt. Obwohl ich noch die wirklich lange bc-Scripte geschrieben habe, kommt mir der Anblick eines etwas komplexeren bc-Codes vertraut vor...

Aber wie gesagt: man braucht in diesem Fall nicht mal den bc. Dann sollte man natürlich gleich in der bash bleiben ... :D
 
OP
X

Xero

Member
Man Leute ihr seit klasse :D

Heute wieder viel dazugelernt... das Kommando bc kennengelert (tschüss perl-aufrufe!!), und gelernt dass die Bash doch mit Kommazahlen umgehen kann.

Ich war auf diesem Trip weil man ja z.B. mit let A=$B*$C nur integre Werte genommen werden, und die Kommazahlen einfach abgeschnitten werden....

Danke schön für eure Hilfe, beide Daumen hoch!
 

TeXpert

Guru
notoxp schrieb:
Aber wie gesagt: man braucht in diesem Fall nicht mal den bc. Dann sollte man natürlich gleich in der bash bleiben ... :D

naja, in diesem Fall schon, wenns nur um den Vergleich geht, aber spätestens bei kleinen Rechnungen wirds in der bash eng...
 

regexer

Advanced Hacker
TeXpert schrieb:
aber spätestens bei kleinen Rechnungen wirds in der bash eng...
Stimmt! Let kann kein Komma, expr auch nicht. Was aber auch ganz gut geht, ist die scriptsprache python, die sich wie folgt als "Taschenrechner" verwenden lässt:
Code:
python -c 'print 2 * 1.5'
 
Oben