Programm- oder Funktionsrückgabe auswerten

In Bash-Scripten werden oft externe Programme und Tests ausgeführt deren Rückgabewerte man kontrollieren möchte, z.B. ob das Programm gelaufen ist oder ob es einen Fehler gab.

Folgendes wird gerne verwendet, ist aber für einen einfachen Test etwas umständlich:

# Beispiel: gibts einen bestimmten Benutzer?
grep -q username /etc/passwd
if (($? > 0)); then
  echo 'Benutzer wurde nicht gefunden' >&2
  exit 1
fi

Schneller und besser zu lesen ist dieser Code:

if grep -q username /etc/passwd; then
  # nix machen
  :
else
  echo 'Benutzer wurde nicht gefunden' >&2
  exit 1
fi

# oder noch kürzer mit Negation
if grep -q username /etc/passwd; then
  echo 'Benutzer wurde nicht gefunden' >&2
  exit 1
fi

Alternativ gehts auch mit einer || (ODER, wenn der Rückgabewert nicht 0 ist) oder && (UND, wenn der Aufruf eine 0 zurückgibt) Verknüpfung:

grep -q username /etc/passwd || {
  echo 'Benutzer wurde nicht gefunden' >&2
  exit 1
}

Die Auswertung von $? ist damit eigentlich nur notwendig, wenn man tatsächlich auf einen ganz bestimmten Rückgabewert prüfen will. rsync etwa liefert für viele Fehler einen bestimmten Code:

So kann z.B. nur der Fehler in ein Logfile geschrieben werden:

rsync -a --delete quelle ziel
if (($? == 30)); then
    echo "Timeout in data send/receive" >> $logfile
    exit 1
fi

Revision #1
Created 27 July 2021 10:22:28 by magenbrot
Updated 27 July 2021 10:23:22 by magenbrot