Il tuo comando,
check=grep -ci 'text' file.sh
sarà interpretato dalla shell come "esegui il comando -ci
con gli argomenti text
e file.sh
, e imposta la variabile check
sul valore grep
nel suo ambiente".
La shell memorizza il valore di uscita dell'ultimo comando eseguito nella variabile ?
. Puoi assegnare il suo valore a una delle tue variabili come questa:
grep -i 'PATTERN' file
check=$?
Se vuoi agire su questo valore, puoi usare la tua check
variabile:
if [ "$check" -eq 0 ]; then
# do things for success
else
# do other things for failure
fi
oppure potresti saltare usando una variabile separata e dover ispezionare $?
tutti insieme:
if grep -q -i 'pattern' file; then
# do things (pattern was found)
else
# do other things (pattern was not found)
fi
(nota il -q
, indica grep
di non produrre nulla e di uscire non appena qualcosa corrisponde; non siamo davvero interessati a ciò che corrisponde qui)
Oppure, se vuoi semplicemente "fare cose" quando il modello non viene trovato:
if ! grep -q -i 'pattern' file; then
# do things (pattern was not found)
fi
Il salvataggio $?
in un'altra variabile è sempre necessario solo se è necessario utilizzarlo in un secondo momento, quando il valore in $?
è stato sovrascritto, come in
mkdir "$dir"
err=$?
if [ "$err" -ne 0 ] && [ ! -d "$dir" ]; then
printf 'Error creating %s (error code %d)\n' "$dir" "$err" >&2
exit "$err"
fi
Nel frammento di codice sopra, $?
verrà sovrascritto dal risultato del [ "$err" -ne 0 ] && [ ! -d "$dir" ]
test. Salvarlo qui è davvero necessario solo se dobbiamo visualizzarlo e usarlo con exit
.
$?
subito dopo che il comando è terminato.