GNU/Linux >> Tutoriels Linux >  >> Linux

Commande de sortie Bash et codes de sortie

Souvent, lors de l'écriture de scripts Bash, vous devrez terminer le script lorsqu'une certaine condition est remplie ou prendre des mesures en fonction du code de sortie d'une commande.

Dans cet article, nous couvrirons la exit de Bash commande intégrée et les états de sortie des commandes exécutées.

État de sortie #

Chaque commande shell renvoie un code de sortie lorsqu'elle se termine, avec succès ou sans succès.

Par convention, un code de sortie de zéro indique que la commande s'est terminée avec succès, et différent de zéro signifie qu'une erreur a été rencontrée.

La variable spéciale $? renvoie l'état de sortie de la dernière commande exécutée :

date &> /dev/nullecho $?

La date la commande s'est terminée avec succès et le code de sortie est zéro :

0

Si vous essayez d'exécuter ls sur un répertoire inexistant le code de sortie sera différent de zéro :

ls /nonexisting_dir &> /dev/nullecho $?
2

Le code d'état peut être utilisé pour savoir pourquoi la commande a échoué. La page de manuel de chaque commande inclut des informations sur les codes de sortie.

Lors de l'exécution d'un pipeline multi-commandes, l'état de sortie du pipeline est celui de la dernière commande :

sudo tcpdump -n -l | tee file.outecho $?

Dans l'exemple ci-dessus echo $? imprimera le code de sortie du tee commande.

Bash exit commande #

La exit la commande quitte le shell avec le statut N . Il a la syntaxe suivante :

exit N

Si N n'est pas donné, le code d'état de sortie est celui de la dernière commande exécutée.

Lorsqu'elle est utilisée dans des scripts shell, la valeur fournie comme argument à la exit La commande est renvoyée au shell sous forme de code de sortie.

Exemples #

Le statut de sortie des commandes peut être utilisé dans des commandes conditionnelles telles que if . Dans l'exemple suivant grep sortira avec zéro (ce qui signifie vrai dans les scripts shell) si la "chaîne de recherche" est trouvée dans filename :

if grep -q "search-string" filename then
  echo "String found."
else
  echo "String not found."
fi

Lors de l'exécution d'une liste de commandes séparées par && (ET) ou || (OU), l'état de sortie de la commande détermine si la prochaine commande de la liste sera exécutée. Ici, le mkdir la commande ne sera exécutée que si cd renvoie zéro :

cd /opt/code && mkdir project

Si un script se termine par exit sans spécifier de paramètre, le code de sortie du script est celui de la dernière commande exécutée dans le script.

~/script.sh
#!/bin/bash

echo "doing stuff..."

exit

En utilisant simplement exit est identique à exit $? ou en omettant la exit .

Voici un exemple montrant comment terminer le script s'il est invoqué par un utilisateur non root :

#!/bin/bash

if [[ "$(whoami)" != root ]]; then
  echo "Only user root can run this script."
  exit 1
fi

echo "doing stuff..."

exit 0

Si vous exécutez le script en tant que root, le code de sortie sera zéro. Sinon, le script se terminera avec le statut 1 .

Conclusion #

Chaque commande shell renvoie un code de sortie lorsqu'elle se termine. La exit La commande est utilisée pour quitter un shell avec un statut donné.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. Différence entre " et " sur la ligne de commande (bash) ? ?

  2. commande d'exportation bash

  3. Code de sortie de l'affectation de variable à la substitution de commande dans Bash

  4. Quelle est la différence entre &> et >&en bash ?

  5. Que fait le -e dans un bash shebang ?

Commande de lecture bash

Bash Heredoc

Commande de source bash

Commande d'historique sous Linux (historique de bash)

Commande Bash printf

Script bash (II)