Comment détecter et gérer les erreurs dans vos scripts bash

Comment détecter et gérer les erreurs dans vos scripts bash

Nous pouvons utiliser la commande TRAP pour attraper le système de signal d'erreur par le système pendant l'exécution du script. Alors vous pouvez exécuter une commande shell ou appeler une fonction. De cette façon, vous pouvez exécuter votre code de script personnalisé sur une erreur qui s'est produite dans un script bash.

Cela peut être utile pour réintégrer les modifications partielles, clôturer les connexions de la base de données ou l'état de l'e-mail aux personnes concernées, etc. Vous pouvez utiliser des commandes de pièges avec 'SE TROMPER' signaux comme:

Trap 'on_error_function' err 

Lorsqu'une erreur est générée dans un script de shell, il exécutera une fonction nommée 'on_error_function' de votre script shell. Au lieu d'appeler une fonction, vous pouvez également exécuter une commande.

Exemple: exécutez une fonction sur l'erreur en bash

Comprenons avec un exemple. Créez un exemple de script de shell et créez une fonction avec n'importe quel nom. Puis ajoutez le piège Commande avec la fonction pour SE TROMPER signal. Ensuite, ajoutez une commande simple qui génère une erreur.

#!/ usr / bin / env bash on_error () echo "Une erreur s'est produite" trap 'on_error' err ls ~ / dir_not_exists
123456789#!/ usr / bin / env bash on_error () echo "Une erreur s'est produite" trap 'on_error' err ls ~ / dir_not_exists

Exécutez le script ci-dessus et vous devriez voir les résultats ci-dessous:

Sortie: LS: Impossible d'accéder à '/ home / tecadmin / dir_not_exists': aucun fichier ou répertoire de ce type, une erreur s'est produite 

Vous pouvez voir que l'erreur est piégée et la fonction on_error () est exécuté par le script bash.

Exemple: exécutez une commande sur l'erreur en bash

Voyons un autre exemple. Ici, nous exécuterons une commande lorsqu'une erreur se produira dans le script shell.

#!/ usr / bin / env-bash trap 'echo ohhh non!'Err ls ~ / dir_not_exists
12345#!/ usr / bin / env-bash trap 'echo ohhh non!'Err ls ~ / dir_not_exists

Dans le script ci-dessus, nous ne définissons aucune fonction distincte. Exécutez simplement une commande echo sur l'erreur. Exécutez le script ci-dessus et voyez les résultats.

Sortie: LS: Impossible d'accéder à '/ home / tecadmin / dir_not_exists': pas de tel fichier ou répertoire ohhh non! 

Exemple: obtenez le nombre d'erreur de ligne

Vous pouvez également trouver le numéro de ligne, où l'erreur s'est produite dans le script bash avec le nom du script. Pour ce faire, utilisez le «appelant» intégré bash.

#!/ usr / bin / env bash on_error () echo "Erreur trouvée dans: $ (appelant)"> & 2 trap 'on_error' err ls ~ / dir_not_exists
123456789#!/ usr / bin / env bash on_error () echo "Erreur trouvée dans: $ (appelant)"> & 2 trap 'on_error' err ls ~ / dir_not_exists

Exécutez le script ci-dessus et voyez les résultats. Vous verrez le nom du script et le numéro de ligne, où l'erreur s'est produite.

Sortie: LS: Impossible d'accéder à '/ home / tecadmin / dir_not_exists': aucune erreur de fichier ou de répertoire trouvé dans: 9 ./scénario.shot 

Conclusion

Merci d'avoir lu cet article. Espérons que ce tutoriel vous aide avec une meilleure écriture de scripts shell en attrapant l'erreur et en prenant des mesures.

N'oubliez pas non plus que le piège Err attrape uniquement les erreurs d'exécution. Comme si une commande renvoie le code d'état non nul. Il n'attrape pas les erreurs de syntaxe, car dans le cas d'une erreur de syntaxe, le script échoue sans exécuter aucune commande.