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

Rückgabewert direkt in test : $?(befehl) o.ä.?

ojkastl

Hacker
Hallo,

kann man in ner test-Bedingung direkt auf den Rückgabewert prüfen?
Dass mir $? den Rückgabewert des letzten kommandos ausgibt weiss ich, nur geht das direkt in der Bedingung, also so

Code:
if [ $?(befehl) = 1 ] ; then

Bisher hab ich immer zuerst den befehl aufgerufen, und dann getestet:

Code:
befehl
if [ $? = 0] ;then

Dankeschön,
Saber
 

SoeDib

Member
Saber_Rider schrieb:
Bisher hab ich immer zuerst den befehl aufgerufen, und dann getestet:

Code:
befehl
if [ $? = 0] ;then
Also, ich mach das in der Regel so:
Code:
if befehl; then bla; else blubb; fi
Bsp:
if ls; then echo gelistet; else echo Fehler; fi
oder auch so, wenn ich keinen else-Zweig benötige:
Code:
ls && echo gelistet
Edit: Diese Form ist im Wesentlichen mit der von haveaniceday identisch.

Grüße,
SoeDib
 
das was du meinst ist wahrscheinlich etwas in der Art:
(ist ein Teil aus einem alten script)
Code:
for Part in $Array
do
        if [ "`test -d $Part && echo $?`" = 0 ]
        then
      ....
Ich glaube, dass ist es was du wolltest...

MFG havoc
 
OP
O

ojkastl

Hacker
So, jetzt hab ich das nochmal in Ruhe durchgelesen.
Anscheinend muss man sich mit diesen Konstrukten behelfen, aber da kann man nix machen. Ich werd alles mal ausprobieren.

Ich bedanke mich für die Hilfe.
 

regexer

Advanced Hacker
Saber_Rider schrieb:
kann man in ner test-Bedingung direkt auf den Rückgabewert prüfen?
Code:
befehl
if [ $? = 0] ;then
Ja! Der "if" prüft generell den Rückgabewert des Nachgestellten befehls. Ist der Rückgabewert 0 wird in den then-Zweig gegangen ansonsten in den else-Zweig.
Meistens ist der nachgestellte Befehl "test". Das muss aber nicht sein. Das kann auch grep, diff oder sonstwas sein.

Ein praktisches Beispiel "Teste of /etc/hosts den Begriff 'Laber' enthält":
Code:
if grep -q 'Laber' /etc/hosts
then
  echo treffer
else
  echo kein treffer
fi
 
OP
O

ojkastl

Hacker
notoxp schrieb:
Ja! Der "if" prüft generell den Rückgabewert des Nachgestellten befehls. Ist der Rückgabewert 0 wird in den then-Zweig gegangen ansonsten in den else-Zweig.
Meistens ist der nachgestellte Befehl "test". Das muss aber nicht sein. Das kann auch grep, diff oder sonstwas sein.

Ein praktisches Beispiel "Teste of /etc/hosts den Begriff 'Laber' enthält":
Code:
if grep -q 'Laber' /etc/hosts
then
  echo treffer
else
  echo kein treffer
fi

Bei dieser Möglichkeit ist es egal wenn der Befehl was ausspuckt? Also ein grep statt grep -q macht keine Probleme?
 

TeXpert

Guru
panamajo schrieb:
haveaniceday schrieb:
<befehl> || <2.Befehl ausführen, wenn erster Fehlgeschlagen>
sollte heissen:
<2.Befehl ausführen>
ohne Bedingung, egal was war und/oder sein wird.
SCNR

hä? was soll das denn,
man bash schrieb:
n OR list has the form

command1 || command2

command2 is executed if and only if command1 returns a non-zero exit status. The return status of AND and OR lists is the exit status of the
last command executed in the list.
 

panamajo

Guru
Stimmt, mein Fehler.
Ich dachte dass sich das bash OR an dem OR der Logik orientiert. Ist aber ein NAND...
 

regexer

Advanced Hacker
Saber_Rider schrieb:
Bei dieser Möglichkeit ist es egal wenn der Befehl was ausspuckt? Also ein grep statt grep -q macht keine Probleme?
Genau. Falls der Grep etwas findet landet das natürlich auf der Standard-Ausgabe...
 
Oben