ODER-Verknüpfung in Bash-Skript

Post Reply
Message
Author
Maxl

ODER-Verknüpfung in Bash-Skript

#1 Post by Maxl »

Mit z.B.

if [ "$VAR" -ge "100" ]; then ...

realisiert man eine simple if-Abfrage in Bash-Skripten. So weit so klar. Nur wie schreibe ich das, wenn ich zwei Variablen vergleichen und das Ergebnis ODER-verknüpfen will?

if [ "$VAR1" -ge "100" ] || [ "$VAR2" -ge "300" ]; then ...

geht jedenfalls nicht <img src="http://www.pl-forum.de/UltraBoard/Images/Sad.gif" border="0" align="middle">

Jochen

Re: ODER-Verknüpfung in Bash-Skript

#2 Post by Jochen »

Seufz, die bash-Manpage gehört echt mal überarbeitet... Unter "CONDITIONAL EXPRESSIONS" findet man keinen Hinweis darauf, dass ein logisches UND/ODER/NICHT überhaupt möglich ist. Das findet man erst, wenn man sich das test-Kommando oder "[" unter "SHELL BUILTIN COMMANDS" ansieht. Oder-Verknüpfungen macht man mit "-o", Und-Verknüpfungen mit "-a" und ein Nicht mittels "!". Weil jetzt aber "-a" und "-o" gleichzeitig auch normale Optionen für test sind, muss sich dessen Parser echt anstrengen: Wer die Erläuterung dazu unter "test" im ersten Anlauf versteht, ist ein Held. <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Kurz und knapp: Dein Beispiel schreibt man korrekt so<pre>if [ "$VAR1" -ge 100 -o "$VAR2" -ge 300 ] ; then ... </pre>So versteht es übrigens aich die alte Bourne-Shell. Wenn Dein Skript immer in der bash läuft, kannst Du das aber auch viel lesbarer schreiben:<pre> if (( VAR1 >= 100 || VAR2 >= 300 )) ; then ...</pre>Nein, ich habe die "$" vor den Variablennamen nicht vergessen! Schau mal unter "ARITHMETIC EXPRESSION" in der bash-Manpage, da findest Du das beschrieben.

Jochen

ratte

Re: ODER-Verknüpfung in Bash-Skript

#3 Post by ratte »

ich habe mal bis zur weissglut man bash nicht verstanden (das war extrem hardwaregefaehrlich!) und bis zur bloedheit durch rumprobieren herausgefunden, wie das Perl $counter++ Aequivalent in Bash auszusehen hat.
Ich bin also jetzt dumm wie brot und habe weisse haare <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

ratte

Jochen

Re: ODER-Verknüpfung in Bash-Skript

#4 Post by Jochen »

Weisse Haare?!? Du Glücklicher! Meine sind durch Haare-Raufen mittlerweile alle ausgefallen! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

(( counter++ )) , oder nicht? Mit Betonung auf "counter++" und <i>nicht</i> "counter ++" (man beachte das offensichtlich überflüssige und sinnentstellende Leerzeichen zwischen "counter" und "++" ...).

Jochen

ratte

Re: ODER-Verknüpfung in Bash-Skript

#5 Post by ratte »

ganz genau! als ich das schrieb, hatte ich keine Zugang zum Rechner, wo das laeuft und war mir nicht so sicher, das zu posten...

... wo in man bash steht das denn beschrieben???

BTW: Das nutze ich in meinem Packetfilterscript, um alle INPUT rules zu nummerieren, damit ich bei Bedarf eine bestimme rule austauschen kann, damit ich das Script nicht von vorne starten muss. Hat mir das ja Gehirnschmalz gekostet, die iptables-Nummerierung abzuraffen! Aber es funktioniert - und ich bin da sehr stolz drauf!

greetings,
ratte

Jochen

Re: ODER-Verknüpfung in Bash-Skript

#6 Post by Jochen »

Wo das in der man bash steht?!?... Na unter "ARITHMETIC EVALUATION" natürlich! <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> <blockquote><hr> id++ id--
variable post-increment and post-decrement
++id --id
variable pre-increment and pre-decrement
<hr></blockquote>Man beachte die Schreibweise - kein Blank! Wie man das nur missverstehen kann... <i>*kopfschüttel*</i> <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Jochen

ratte

Re: ODER-Verknüpfung in Bash-Skript

#7 Post by ratte »

und woher weiss man automatisch, dass das in doppelten runden Klammern zu stehen hat?

Diese Stelle hatte ich naemlich gefunden, bloss $counter++ funktioniert nicht <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

ratte

Jochen

Re: ODER-Verknüpfung in Bash-Skript

#8 Post by Jochen »

Tja, Unter ARITHMETIC EVALUATION wird man zumindest auf<pre>let "..."</pre>verwiesen. Also kann man auch <pre>let "counter++"</pre>schreiben. Und dann muss man nur noch unter SHELL GRAMMAR bei den Compound Commands merken, dass dort ((...)) exakt das gleiche wie let "..." macht. Einfach, oder? <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Alternativ findet man auch die Seite <a href="http://www.tldp.org/LDP/abs/html/dblparens.html" target="_blank"><!--auto-->http://www.tldp.org/LDP/abs/html/dblpar ... <!--auto--> im Advanced Bash-Scripting Guide, der sowieso sehr empfehlenswert ist. Mir ist nur leider keine deutsche Übersetzung dafür bekannt.

Jochen

Post Reply