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 ]
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 ]
$?
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.
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
.
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 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.