Bash : sortir automatiquement du script si une commande échoue

Utiliser la commande set -e pour tester le code retour

16 novembre 2014

La commande set possède plusieurs options très utiles pour sécuriser vos scripts bash. Parmi elles "set -e", que l'on peut aussi utiliser sous la forme "set -o errexit", permet de sortir automatiquement du script lorsqu'une erreur survient. En plaçant cette commande en haut de votre script, vous n'aurez donc plus besoin de tester manuellement le code retour de chaque commande.

Tester automatiquement si une commande échoue avec set -e

#!/bin/bash

# Fermeture lors d'un code retour différent de 0
set -e;
true;

# Ne pas fermer le script lors d'un code retour différent de 0
# jusqu'au prochain set -e
set +e;

false;
echo 'Ce false ne ferme pas le script';

false;
if [ $? -ne 0 ]; then
        echo 'On peut ainsi attraper un code retour différent de 0';
fi


# Remet en place la fermeture lors d'un code retour différent de 0
set -e;

false || { echo "Erreur personnalisée pour ce false"; }

echo 'Malgré le false nous sommes toujours dans le script car le code retour de false || echo ... est 0';

false;
echo 'Ne sera jamais affiché car le false précédent a fermé le script';

Le résultat du lancement du script

$ ./script.sh
Ce false ne ferme pas le script
On peut ainsi attraper un code retour différent de 0
Erreur personnalisée pour ce false
Malgré le false nous sommes toujours dans le script car le code retour de false || echo ... est 0

Après un peu d'entrainement, la commande set deviendra surement votre meilleure alliée. Le manuel détaille, comme à son habitude, tout ce qu'il y a à savoir sur set et ses options.

Découvrez une autre utilisation de set pour tester automatiquement l'initialisation des variables.

A bientôt !

Par
Créateur et administrateur.

Dans la même catégorie

Docker pour les null
Git : annuler le dernier commit sans perdre ses modifications
SSHFS : monter un système de fichier avec SSH
Linux : débloquer une interface graphique gelée
Gnome 3 : changer les raccourcis clavier systèmes
Bash : sortir automatiquement du script si une variable n'est pas initialisée
GIT : merger 2 commits
Nginx : mettre un serveur par défaut
GIT : Afficher la branche courante dans le prompt
Couper une vidéo ou une musique sous linux
Debian / Ubuntu : installer HTTPS pour APT
Filtrer les lignes affichées par la commande tail
Apache 2 : Créer des sous-domaines dynamiques
Transférer des fichiers sur un smartphone android sans câble USB
Comment connaitre la taille d'un dossier sous linux ?
Surveiller la sortie d'une commande avec watch
Comment lancer ou arrêter un script au démarrage de Linux ?
Comment connaître la version de mon OS Linux ?
Comment afficher le cache ARP sous Linux ?
GIT : les commandes indispensables
Comment trouver mon adresse IP publique ?
Linux : Comment configurer une adresse IP fixe ?
Comment supprimer les fichiers plus vieux qu'une date donnée en bash ?
Apache 2 : Comment changer le DocumentRoot en fonction du port ?
GIT : Comment ajouter les nouveaux fichiers automatiquement ?
Comment exécuter un script local sur une machine distante avec SSH ?
32 bits ou 64 bits ?
Ecrire dans le sudoers grâce à visudo

Commentaire(s)