Il tuo comando,
check=grep -ci 'text' file.sh
sarà interpretato dalla shell come "esegui il comando -cicon gli argomenti texte file.sh, e imposta la variabile checksul valore grepnel 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 checkvariabile:
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 grepdi 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.