if abfrage mit mehreren Bedingungen

S

sst

Grünschnabel
Hallo,

ich brauche eine If Abfrage in der ich sage z.B
A muß 10 sein und B kann 12 15 oder 17 sein

mit
if [ $A -eq 10 ] -a [ $B -eq 12 -o $B -eq 15 -o $B -eq 17]
und sämtliche varationen davon geht nicht.

gibt es dazu eine andere Lösung?

mfg
Stefan
 
probier mal die hier:

if [ $A -eq 10 ] && [ $B -eq 12 -o $B -eq 15 -o $B -eq 17 ]
 
Hallo
Warum machst du nicht einfach eine verschachtelte Prüfung?
Sowas ist gerade für Anfänger viel besser lesbarer Code und
vereinfacht die Wartung auch noch nach Monaten.
Also ein simples :
Code:
[b] 
if [ $A  -eq 10 ] ;then
        if [  $B -eq 12 -o $B -eq 15 -o $B -eq 17 ] ;then
         echo "true";
        else
         echo "No true"
         fi
fi[/b]
Gruß Wolfgang
 
Dein "Not true" springt aber nur an, wenn die zweite Bedingung, nicht aber die erste Bedingung falsch ist.

Gruss, Phorus
 
Hallo
Das ist mir klar, und auch nur als Beispiel gedacht, zumal das true interessant ist.
Gruß Wolfgang
 
Hallo Wolfgang,

ich wollte Dir nicht unterstellen, dass Dir das nicht klar ist :)
Ich wollte nur drauf hinweisen, dass, falls "else" benötigt wird, Deine Methode etwas komplizierter ist.

Gruss, Phorus
 
Hallo
Ach so kompliziert ist das doch nicht.
Code:
if [ $A  -eq 10 ] ;then
        if [  $B -eq 12 -o $B -eq 15 -o $B -eq 17 ] ;then
         echo "A und B wahr";
        else
         echo "A wahr aber B falsch"
         fi
else
echo "A falsch, B wird nicht mehr getestet"
fi
;)

Gruß Wolfgang
 
also mit && dazwischen scheint das zu funktionieren, kann mir einer erklären was der unterschied zu -a ist? sollte doch beides ein "und" sein.
 
"man test" und "man bash" sollte Dir helfen.

-a ist eine Option des "test"-Befehls, && dagegen ist ein Kontrollparameter der bash und funktioniert folgendermassen:

Code:
befehl1 && befehl2

befehl2 wird nur ausgeführt, wenn befehl1 fehlerfrei ausgeführt wurde. In Deinem Fall sind es die test-Befehle.
 
Alles Klar danke erstmal.
Nur stehe ich schon wieder bein nächsten Problem :think: :

diesmal soll erkannt werden ob das erst zeichen eine 0 ist:

if [ $a = ^0 ];then
echo erste 0 erkannt

oder
if [ $a = 0? ];then
echo erste 0 erkannt

und das ganze mit ' oder " oder \ geht auch nicht.
? steht doch für ein belibiges zeichen und ^ für Zeilenanfang.
Wo liegt mein fehler?
 
Hallo
Also wenn du es als String vergleichen willst,und die bash nutzt:
A="0123456";
if [ ${A:0:1} ="0" ]; then "echo ${A:0:1} ist 0"; else echo "${A:0:1} nicht 0"; fi

Bei Zahlenvergleich verwende
if [ ${A:0:1} -eq "0" ]

Auszug aus man bash(3)
...
An additional binary operator, =~, is available, with the same precedence
as == and !=. When it is used, the string to the right of the operator is
considered an extended regular expression and matched accordingly (as in
regex(3))

also sollte das folgende auch gehen:

if [[ $A =~ ^0.* ]]; then echo "0 am Anfang gefunden"; fi

Es gibt noch weitere Möglichkeiten.

man bash ;)

Gruß Wolfgang
 

Ähnliche Themen

Linux System Admin (w/m/g)/innovatives SW-Unternehmen/Vollzeit/ HomeOffice/asap

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

Gruppenchat: OTP-Verschlüsselung

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Creative Labs SoundBlaster Audigy 2 ZS unter Debian / Kernel 3.16

Zurück
Oben