La gestion des exceptions dans les scripts shell?
Je suis à la recherche pour la gestion des exceptions mécanisme dans un script shell. Est-il un try,catch équivalent mécanisme en script shell ?
Vous devez vous connecter pour publier un commentaire.
Il n'est pas vraiment un
try/catch
en bash (je suppose que vous utilisez bash), mais vous pouvez obtenir un tout à fait le même comportement à l'aide de&&
ou||
.Dans cet exemple, vous souhaitez exécuter
fallback_command
sia_command
échoue (retourne une valeur non nulle):Et dans cet exemple, vous voulez exécuter
second_command
sia_command
est réussie (retourne 0):Ils peuvent facilement être mélangés à l'aide d'un shell interne est exécuté, par exemple, la commande suivante va exécuter
a_command
, si elle réussit, elle sera alors exécutéother_command
, mais sia_command
ouother_command
échoue,fallback_command
seront exécutées:(a_command || : )
et la ligne suivante sera exécutée comme si aucune erreur qui s'est passé dansa_command
.Le si/d'autre de la structure et les codes de sortie peut vous aider à faux certaines d'entre elles. Cela devrait fonctionner dans Bash ou Bourne (sh).
if foo ; then else
peut être simplifié àif ! foo ; then
, +1 de toute façon.better
si vous l'avez expliqué à l'un de poser la question, le pseudo-code vous post, plutôt que juste un bloc de code obscur qu'ils ne peuvent pas comprendre. Si un enfant ne peut pas le comprendre, ce n'est pas une bonne réponse.Voici deux simples bashfunctions qui permettent eventhandling dans bash:
Vous pouvez l'utiliser pour la base de exceptionhandling comme ceci:
Exceptionhandling à l'aide de blocs try/catch n'est pas pris en charge dans bash, cependant, vous pourriez veux essayer de regarder les BANGSH cadre qui le supporte (c'est un peu comme jquery pour bash).
Cependant, exceptionhandling sans en cascade try/catch-blocs est similaire à eventhandling, qui est possible dans presque tout langue avec la matrice de support.
Si vous voulez garder votre code de nice et bien rangé (sans if/else verbosité), je vous recommande d'utiliser les événements.
La suggestion, qui MatToufoutu recommande (à l'aide de || et &&) n'est pas recommandé pour les fonctions, mais ok pour les commandes simples. (voir BashPitfalls sur les risques)