... il existe des coins sombres dans le shell Bourne et les gens les utilisent tous.
-- Chet Ramey
La commande exit met fin au script, exactement comme dans un programme C. Elle peut également renvoyer une valeur, laquelle sera disponible pour le processus parent du script.
Chaque commande renvoie un code de sortie (quelque fois nommé état de retour ). En cas de succès, la commande renvoie un 0, en cas d'échec elle renvoie une valeur non vide qui est habituellement interprétable comme un code d'erreur. Les commandes, programmes et utilitaires UNIX bien réalisés renvoient un code de sortie 0 lors de leur exécution réussie, bien qu'il y ait quelques exceptions.
De même, les fonctions à l'intérieur d'un script, comme le script lui-même, renvoient un code de sortie. La dernière commande exécutée dans la fonction ou le script détermine le code de sortie. À l'intérieur d'un script, une commande exit nnn peut être employée pour retourner un code de sortie nnn au shell (nnn doit être un nombre entier compris entre 0 et 255).
Lorsqu'un script se termine avec un exit sans paramètre, le code de sortie du script est le code de sortie de la dernière commande exécutée dans le script (avant exit).
#!/bin/bash COMMANDE_1 . . . COMMANDE_N # Se terminera avec le code de la dernière commande. exit
L'équivalent d'un simple exit est exit $?, et on peut même omettre le exit.
#!/bin/bash COMMANDE_1 . . . COMMANDE_N # Se terminera avec le code de la dernière commande. exit $?
#!/bin/bash COMMANDE1 . . . COMMANDE_N # Se terminera avec le code de la dernière commande.
$? lit le code de sortie de la dernière commande exécutée. Après la fin d'une fonction, $? donne le code de sortie de la dernière commande exécutée dans la fonction. C'est la manière qu'emploie Bash pour attribuer aux fonctions une « valeur de retour ». [28] Après la fin d'un script, un $? sur la ligne de commande indique le code de sortie du script, c'est-à-dire celui de la dernière commande exécutée dans le script qui est, par convention, 0 en cas de succès ou un entier compris entre 1 et 255 en cas d'erreur.
$? est particulièrement utile pour tester le résultat d'une commande dans un script (voir l'Exemple 15.35, « Utiliser cmp pour comparer deux fichiers à l'intérieur d'un script. » et l'Exemple 15.20, « Chercher les mots dans une liste pour tester leur validité »).
Le !, qualificateur du non logique, inverse le résultat d'un test ou d'une commande et ceci affecte son code de sortie.
Exemple 6.2. Inverser une condition en utilisant !
true # La commande intégrée "true" echo "code de sortie de \"true\" = $?" # 0 ! true echo "code de sortie de \"! true\" = $?" # 1 # Notez que "!" nécessite une espace entre lui et la commande. # !true renvoie une erreur "command not found" # # L'opérateur '!' préfixant une commande appelle le mécanisme d'historique de #+ Bash. true !true # Aucune erreur cette fois, mais pas de négation non plus. # Il répète simplement la précédente commande (true). # Merci à Stéphane Chazelas et Kristopher Newsome.
Certains codes de sortie ont une signification spéciale et ne devraient pas être employés par l'utilisateur dans un script.