ubuntuusers.de

Beendigungsstatus in if-Abfrage

Status: Gelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

sinusQ

Avatar von sinusQ

Anmeldungsdatum:
27. Oktober 2010

Beiträge: 193

Wohnort: Neudau

Hallo,

meine Frage wäre, ob ich den Beendigungsstatus ($?) eines Befehles auch direkt in eine if-Abfrage verpacken kann?

Sprich, ich würde gerne folgendes verkürzen bzw. verschönern:

1
grep -q suchtext textdatei; if [ $? -eq 0 ]; then echo "ausdruck gefunden"; fi

Ich hab's inzwischen mit vielen verschiedenen Varianten probiert, allerdings bis jetzt ohne Erfolg. Das Problem ist, dass folgende Zeile nicht den Beendigungsstatus, sondern die STDOUT an die if übergibt, was mir vollkommen klar ist:

1
if [ $(grep suchtext textdatei) -eq 0 ]; then echo "ausdruck gefunden"; fi

Bitte um kurzen Hinweis. Danke!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

1
grep -q suchtext datei && echo "Ausdruck gefunden" 

Das && ist ein logisch kurzschließender Operator. Der ganze Ausdruck wird falsch, schon wenn der linke Ausdruck falsch ist. Dann muss der 2. Teil nicht geprüft werden und das && garantiert, dass dann der 2. Test nicht durchgeführt wird, was man sich standardmäßig so zu Nutze macht, sprich, das ist so üblich, dass man es nicht gesondert kommentieren würde.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13225

Und wenn es unbedingt ein if sein muss, z.B. weil man noch eine Else braucht:

1
2
3
4
5
if grep -q suchtext datei; then
  echo "Ausdruck gefunden"
else
  echo "Else weiß nix von suchtext"
fi

Ciao

robert

PS: Ja, das kann man auch mit den logischen Operatoren machen, aber das wird schnell unübersichtlich, wenn mehrere Kommandos auszuführen sind.

sinusQ

(Themenstarter)
Avatar von sinusQ

Anmeldungsdatum:
27. Oktober 2010

Beiträge: 193

Wohnort: Neudau

Ich hab das ganze dann noch mehr zusammengeschoben & eine große if daraus gemacht.

1
2
3
4
5
if [ $WORKING_DEV -eq $ACTIVE_DEV ] && grep -q clean $DETAILS ; then
   echo "ok"
else
   echo "mail versenden"
fi

Hab dann auch noch alle Möglichkeiten durchprobiert & es funktioniert recht gut.

Danke euch beiden für die Denkanstöße ☺

Antworten |