94 votes

Quelle est la signification de exit 0, exit 1, et exit 2 dans un script bash ?

Je fais des exercices d'entraînement.

Écrivez un script qui recevra un numéro de mois comme argument et qui traduira ce numéro en un nom de mois. Le résultat sera imprimé sur stdout.

J'ai trouvé une solution :

# Test for number of argument

if [ "$#" -eq 0 ] ; 
then
  echo -e "No argument."
  echo -e "Write a number between 1 and 12."
  exit 1
elif [ "$#" -gt 1 ] ;
then
  echo -e "More than 1 argument."
  echo -e "Write a number between 1 and 12."
  exit 1
else
  numb=$1
  case "$numb" in
    1) echo "Month: January";;
    2) echo "Month: February";;
    3) echo "Month: March";;
    4) echo "Month: April";;
    5) echo "Month: May";;
    6) echo "Month: June";;
    7) echo "Month: July";;
    8) echo "Month: August";;
    9) echo "Month: September";;
   10) echo "Month: October";;
   11) echo "Month: November";;
   12) echo "Month: December";;
    *) echo -e "You wrote a wrong number. Try again with writing number between 1 and 12.";;
  esac
fi
exit 2
exit 0

Qu'est-ce que exit 1, exit 0 y exit 2 et pourquoi les utiliser ?

110voto

Mattio Points 817

En voici un bon référence pour les codes de sortie Shell. :

Exit code 0        Success
Exit code 1        General errors, Miscellaneous errors, such as "divide by zero" and other impermissible operations
Exit code 2        Misuse of shell builtins (according to Bash documentation)        Example: empty_function() {}

Avertissement : l'utilisation du code de sortie approprié n'est pas une exigence et n'est pas appliquée par le Shell. Les développeurs peuvent ignorer les conseils s'ils le jugent bon.

25voto

Arronical Points 18815

Utilisation de exit et un nombre est un moyen pratique de signaler le résultat de votre script. Il imite la manière dont les commandes bash sortent un code de retour. Avec les commandes bash, le code de retour 0 signifie généralement que tout s'est exécuté avec succès et sans erreur. exit fait également en sorte que votre script arrête son exécution à ce moment-là et retourne à la ligne de commande.

Tout code de retour supérieur à 0 indique une erreur quelconque, bien que parfois l'erreur ne soit pas critique. Pour chaque commande, il devrait être possible de trouver une documentation qui vous indique la signification de chaque code de retour.

Vous pouvez obtenir le code de retour de la dernière commande bash en utilisant la variable Shell. $? comme ça :

$ echo "something"
something
$ echo $?
0
$ cp
cp: missing file operand
Try 'cp --help' for more information.
$ echo $?
1

Lorsque vous l'utilisez dans un script, vous pouvez interroger le code de retour de la même manière lorsque l'exécution est terminée. Vous verrez donc qu'en ayant :

exit 2
exit 0

est en quelque sorte dénué de sens, puisque vous ne pouvez jamais atteindre le exit 0 partie.

5voto

geekasaurus Points 59

Tout seul, exit implique une valeur de sortie de zéro, ou l'achèvement réussi de votre script. Vous n'avez pas besoin d'ajouter l'argument zéro à la commande exit pour indiquer un achèvement réussi. Votre script peut (ou va probablement) sortir avec succès bien qu'il teste une condition erronée. Dans ce cas, vous voulez spécifiquement qu'il sorte avec la condition d'erreur (ou 1).

echo -e "Enter numbers 1-4" \c"
read NUM
case $NUM in 
    1) echo "one";;
    2) echo "two";;
    3) echo "three";;
    4) echo "four";;
    *) echo "invalid answer"
       exit 1;;
esac

El exit dans la dernière ligne n'a pas besoin d'être là du tout. Elle peut être appelée avec le zéro ou ne pas être appelée du tout. Sans spécifier l'argument 1 à la commande exit, la réponse dans tous ces cas à la question echo $? serait égal à zéro.

Cependant, en spécifiant l'argument 1 à la commande exit, la réponse à la commande echo $? serait de 1. Utilisez donc l'argument 1 à la commande exit lorsque vous voulez spécifier que le script a quitté avec une condition d'erreur.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X