GNU/Linux >> Linux Esercitazione >  >> Linux

Comando di uscita Bash e codici di uscita

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.

~/script.sh
#!/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.


Linux
  1. La differenza tra gli operatori Bash [[ Vs [ Vs ( Vs ((?

  2. Differenza tra "e" sulla riga di comando (bash)??

  3. comando eval in Bash e i suoi usi tipici

  4. Bash:loop fino a quando lo stato di uscita del comando è uguale a 0

  5. Bash - Comando data e spazio

Bash ha letto Comando

Bash Heredoc

Comando sorgente Bash

Comando della cronologia in Linux (Cronologia di Bash)

Comando Bash printf

Script Bash(II)