48 Stimmen

Was bedeutet if [ $? -eq 0 ] für Shell-Skripte?

In einem Shell-Skript, das ich gesehen habe, gibt es diese Zeile:

grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME}  > /dev/null
if [ $? -eq 0 ]

47voto

Wyzard Punkte 32772

$? ist der Exit-Status des zuletzt ausgeführten Befehls; gemäß der Konvention bedeutet 0 Erfolg und alles andere einen Fehler. Diese Zeile testet, ob der grep Befehl erfolgreich.

En grep heißt es in der Manpage:

Der Exit-Status ist 0, wenn die ausgewählten Zeilen gefunden wurden, und 1, wenn sie nicht gefunden wurden. Wenn ein Fehler auftrat, ist der Exit-Status 2. (Hinweis: POSIX-Fehlerbehandlungscode sollte auf '2' oder höher prüfen.)

In diesem Fall wird also überprüft, ob irgendwelche ERROR-Zeilen gefunden wurden.

44voto

Chris Eberle Punkte 46685

Es prüft den Rückgabewert ( $? ) von grep . In diesem Fall wird es mit 0 (Erfolg) verglichen.

Wenn Sie so etwas sehen (Überprüfung des Rückgabewerts von grep), wird normalerweise überprüft, ob die betreffende Zeichenkette erkannt wurde. Obwohl die Umleitung zu /dev/null ist nicht notwendig, dasselbe kann auch mit -q .

4voto

William Pursell Punkte 188248

Es ist eine extrem überstrapazierte Methode, um den Erfolg oder Misserfolg eines Befehls zu überprüfen. Normalerweise würde der von Ihnen angegebene Codeschnipsel wie folgt umgestaltet werden:

if grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null; then
   ...
fi

(Obwohl Sie in einigen Fällen 'grep -q' verwenden können, anstatt nach /dev/null umzuleiten, ist dies nicht portabel. Viele Implementierungen von grep unterstützen die Option -q nicht, so dass Ihr Skript fehlschlagen kann, wenn Sie es verwenden).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X