Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Perl-Conditionals in Bash-Script auswerten

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Xero
Member
Member
Beiträge: 107
Registriert: 31. Dez 2003, 15:43
Wohnort: Baden-Württemberg
Kontaktdaten:

Perl-Conditionals in Bash-Script auswerten

Beitrag von Xero »

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 :?
Grüße, Xero

Die Board Suche ist dein Bester Freund, also benutze sie auch!!!!!!!!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Re: Perl-Conditionals in Bash-Script auswerten

Beitrag von regexer »

Xero hat geschrieben: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: Alles auswählen

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: Alles auswählen

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?
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Re: Perl-Conditionals in Bash-Script auswerten

Beitrag von regexer »

Xero hat geschrieben: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: Alles auswählen

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 ...
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

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 :)

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
taki
Advanced Hacker
Advanced Hacker
Beiträge: 974
Registriert: 30. Apr 2004, 17:40
Wohnort: Berlin

Beitrag von taki »

TeXpert hat geschrieben:...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.
SuSE 12.3 kernel 3.7.10-1.16-desktop, K Desktop Environment Version 4.10.5 r1 - Medion Titanium Aldi v. 03/2009
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TeXpert hat geschrieben: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
Xero
Member
Member
Beiträge: 107
Registriert: 31. Dez 2003, 15:43
Wohnort: Baden-Württemberg
Kontaktdaten:

Beitrag von Xero »

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!
Grüße, Xero

Die Board Suche ist dein Bester Freund, also benutze sie auch!!!!!!!!
Benutzeravatar
TeXpert
Guru
Guru
Beiträge: 2166
Registriert: 17. Jan 2005, 11:22

Beitrag von TeXpert »

notoxp hat geschrieben: 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...

Code: Alles auswählen

# to resolve all your problems, try this:
HOWTO='pack c5,41*2,sqrt 7056,unpack(c,H)-2,oct 115' && perl -le "print $HOWTO"
Ich beantworte keine Supportfragen per PM!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

TeXpert hat geschrieben: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: Alles auswählen

python -c 'print 2 * 1.5'
Antworten