Bash Error Detection and Manage Conseils et astuces
- 4834
- 1037
- Zoe Dupuis
Pour détecter et gérer les erreurs dans un script bash, vous pouvez utiliser le 'set -e'
et 'piège'
commandes, ainsi que le 'si'
et 'cas'
déclarations et le '||'
et '&&'
les opérateurs.
Vous pouvez utiliser la commande set -e au début de votre script pour activer ce comportement, ou vous pouvez l'utiliser avant les commandes individuelles pour l'activer uniquement pour ces commandes.
Il est important de noter que le 'set -e'
La commande affecte uniquement l'état de sortie des commandes individuelles. Il ne capte pas les erreurs causées par des erreurs de syntaxe ou d'autres problèmes dans le script lui-même. Pour attraper ces types d'erreurs, vous pouvez utiliser le 'set -o'
Option errexit à la place.
Voyons quelques exemples:
- Le
'set -e'
La commande dit à Bash de quitter immédiatement si une commande renvoie un statut de sortie non nul. Ceci est utile pour détecter et gérer les erreurs dans votre script. Par exemple: #!/ bin / bash set -e # Certaines commandes qui peuvent échouer Command1 Command2 # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succèdent à Echo "Toutes les commandes terminées avec succès"12345678910 #!/ bin / bash set -e # Certaines commandes qui peuvent échouercommand1command2 # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succédEcho "toutes les commandes terminées avec succès" Si Command1 ou Command2 renvoie un statut de sortie non nul, le script sortira immédiatement et l'écho de ligne «toutes les commandes terminées avec succès» ne seront pas exécutées.
- Vous pouvez également utiliser le
'||'
Opérateur pour exécuter une autre commande si le précédent a échoué. #!/ bin / bash set -e # certaines commandes qui peuvent échouer la commande1 || echo "Command1 a échoué"; sortie 1; Command2 || echo "Command2 a échoué"; sortie 1; # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succèdent à Echo "Toutes les commandes terminées avec succès"12345678910 #!/ bin / bash set -e # certaines commandes qui peuvent échouercommand1 || echo "Command1 a échoué"; sortie 1; Command2 || echo "Command2 a échoué"; sortie 1; # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succédé "toutes les commandes terminées avec succès" Dans cet exemple, le || L'opérateur est utilisé pour exécuter la commande ou le bloc de commandes le suivant si la commande précédente échoue. La commande de sortie 1 est utilisée pour quitter le script avec un statut de sortie non nulle, indiquant une erreur.
- Le
'piège'
La commande vous permet de spécifier une commande ou une série de commandes à exécuter lorsqu'un signal particulier est reçu. Vous pouvez l'utiliser pour attraper des erreurs et effectuer des tâches de nettoyage, telles que la suppression des fichiers temporaires ou les modifications de retour en arrière. Par exemple: #!/ bin / bash set -e # Créer un fichier temporaire temp_file = $ (mktemp) # supprimer le fichier temporaire sur le trappe de sortie 'rm -f $ temp_file' exit # certaines commandes qui peuvent échouer la commande1 || echo "Command1 a échoué"; sortie 1; Command2 || echo "Command2 a échoué"; sortie 1; # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succèdent à Echo "Toutes les commandes terminées avec succès"12345678910111213141516 #!/ bin / bash set -e # Créer un filetemp_file temporaire = $ (mktemp) # supprimez le fichier temporaire sur exittrap 'rm -f $ temp_file' exit # Certaines commandes qui peuvent échouercommand1 || echo "Command1 a échoué"; sortie 1; Command2 || echo "Command2 a échoué"; sortie 1; # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succédé "toutes les commandes terminées avec succès" Dans cet exemple, la commande TRAP spécifie que le
'rm -f $ temp_file'
la commande doit être exécutée lorsque le script reçoit le 'SORTIE' signal. Cela garantit que le fichier temporaire est supprimé, même si le script sort en raison d'une erreur. - Vous pouvez utiliser le
'si'
et'cas'
instructions pour effectuer différentes actions en fonction de l'état de sortie d'une commande. Par exemple: #!/ bin / bash set -e # certaines commandes qui peuvent échouer si Command1; Ensuite, Echo "Command1 a succédé" else echo "Command1 a échoué" Exit 1 fi case "$ (Command2)" dans "Success") echo "Command2 a succédé" ;; "échec") echo "Command2 a échoué"; sortie 1 ;; ESAC # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succèdent à Echo "Toutes les commandes terminées avec succès"12345678910111213141516171819 #!/ bin / bash set -e # Certaines commandes qui peuvent défailler Command1; Ensuite, Echo "Command1 a succédé" else echo "Command1 a échoué" Case de sortie 1fi "$ (Command2)" dans "Success") echo "Command2 a succédé" ;; "échec") echo "Command2 a échoué"; sortie 1 ;; ESAC # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succédé "toutes les commandes terminées avec succès" Dans cet exemple, l'instruction if est utilisée pour vérifier l'état de sortie de Command1, et l'instruction CASE est utilisée pour vérifier la sortie de Command2.
- Vous pouvez également utiliser le
'&&'
Opérateur pour exécuter une commande ou un bloc de commandes uniquement si la commande précédente réussit. Par exemple: #!/ bin / bash set -e # Certaines commandes qui peuvent échouer Command1 && command2 && commander3 # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succèdent à Echo "Toutes les commandes terminées avec succès"123456789 #!/ bin / bash set -e # Certaines commandes qui peuvent échouer coommand1 && commandes2 && commande3 # Cette ligne ne sera atteinte que si toutes les commandes ci-dessus succédEcho "toutes les commandes terminées avec succès" Dans cet exemple, Command2 ne sera exécuté que si Command1 réussit et Command3 ne sera exécuté que si Command1 et Command2 succèdent.
Conclure
Vous pouvez également utiliser la commande Trap pour attraper d'autres signaux, comme Int (interrompre) ou TERME (mettre fin). Pour plus d'informations, vous pouvez consulter la page Bash Man ou rechercher en ligne des tutoriels et des exemples.
J'espère que ça aide! Faites moi savoir si vous avez des questions.
- « Comment ajouter et supprimer les utilisateurs dans Ubuntu 22.04
- Python - Comment trouver l'adresse IP locale »