Comment détecter et gérer les erreurs dans vos scripts bash
- 3607
- 363
- Anaïs Charles
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.
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_exists12345 | #!/ 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_exists123456789 | #!/ 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.
- « Exécuter plusieurs commandes à la fois dans Linux
- (Résolu) Collation inconnue UTF8MB4_UNICODE_520_CI »