Ihr Befehl,
check=grep -ci 'text' file.sh
wird von der Shell als "den Befehl -ci
mit den Argumenten text
und ausführen file.sh
und die Variable check
auf den Wert grep
in ihrer Umgebung setzen" interpretiert .
Die Shell speichert den Exit-Wert des zuletzt ausgeführten Befehls in der Variablen ?
. Sie können den Wert einer Ihrer eigenen Variablen wie folgt zuweisen:
grep -i 'PATTERN' file
check=$?
Wenn Sie auf diesen Wert reagieren möchten, können Sie entweder Ihre check
Variable verwenden:
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
oder Sie können mit einer separaten Variablen überspringen und müssen $?
alles zusammen überprüfen :
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(Beachten Sie -q
, dass es anweist grep
, nichts auszugeben und zu beenden, sobald etwas übereinstimmt; wir sind nicht wirklich daran interessiert, welche Übereinstimmungen hier vorhanden sind.)
Oder wenn Sie nur "Dinge tun" möchten, wenn das Muster nicht gefunden wird:
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
Das Speichern $?
in eine andere Variable ist nur dann erforderlich, wenn Sie diese später verwenden müssen, wenn der Wert in $?
wie in überschrieben wurde
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
Im obigen Code-Snippet $?
wird durch das Ergebnis des [ "$err" -ne 0 ] && [ ! -d "$dir" ]
Tests überschrieben . Das Speichern hier ist nur dann wirklich notwendig, wenn wir es anzeigen und mit verwenden müssen exit
.
$?
direkt nach Beendigung des Befehls überprüfen .