Spesso quando si scrivono script Bash, sarà necessario terminare lo script quando viene soddisfatta una determinata condizione o intraprendere un'azione in base al codice di uscita di un comando.
In questo articolo tratteremo l'exit di Bash comando integrato e gli stati di uscita dei comandi eseguiti.
Stato uscita #
Ogni comando della shell restituisce un codice di uscita quando termina, con o senza successo.
Per convenzione, un codice di uscita pari a zero indica che il comando è stato completato correttamente e un codice diverso da zero indica che si è verificato un errore.
La variabile speciale $? restituisce lo stato di uscita dell'ultimo comando eseguito:
date &> /dev/nullecho $?
La date comando completato con successo e il codice di uscita è zero:
0
Se provi a eseguire ls su una directory non esistente il codice di uscita sarà diverso da zero:
ls /nonexisting_dir &> /dev/nullecho $?
2
Il codice di stato può essere utilizzato per scoprire perché il comando non è riuscito. La pagina man di ogni comando include informazioni sui codici di uscita.
Quando si esegue una pipeline multicomando, lo stato di uscita della pipeline è quello dell'ultimo comando:
sudo tcpdump -n -l | tee file.outecho $?
Nell'esempio sopra echo $? stamperà il codice di uscita del tee comando.
Bash exit comando #
L'exit comando esce dalla shell con uno stato di N . Ha la seguente sintassi:
exit N
Se N non viene fornito, il codice dello stato di uscita è quello dell'ultimo comando eseguito.
Quando viene utilizzato negli script di shell, il valore fornito come argomento a exit il comando viene restituito alla shell come codice di uscita.
Esempi #
Lo stato di uscita dei comandi può essere utilizzato in comandi condizionali come if . Nell'esempio seguente grep uscirà con zero (che significa vero negli script di shell) se la "stringa di ricerca" viene trovata in filename :
if grep -q "search-string" filename then
echo "String found."
else
echo "String not found."
fi
Quando si esegue un elenco di comandi separati da && (AND) o || (OR), lo stato di uscita del comando determina se verrà eseguito il comando successivo nell'elenco. Qui, la mkdir il comando verrà eseguito solo se cd restituisce zero:
cd /opt/code && mkdir project
Se uno script termina con exit senza specificare un parametro, il codice di uscita dello script è quello dell'ultimo comando eseguito nello script.
#!/bin/bash
echo "doing stuff..."
exit
Usando solo exit è uguale a exit $? o omettendo exit .
Ecco un esempio che mostra come terminare lo script se invocato da un utente non root:
#!/bin/bash
if [[ "$(whoami)" != root ]]; then
echo "Only user root can run this script."
exit 1
fi
echo "doing stuff..."
exit 0
Se esegui lo script come root, il codice di uscita sarà zero. In caso contrario, lo script uscirà con lo stato 1 .
Conclusione #
Ogni comando della shell restituisce un codice di uscita quando termina. L'exit comando viene utilizzato per uscire da una shell con un determinato stato.
Se hai domande o feedback, sentiti libero di lasciare un commento.