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 ?
Réponses
Trop de publicités?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
si a_command
d'échec (retourne une valeur non nulle):
a_command || fallback_command
Et dans cet exemple, vous voulez exécuter second_command
si a_command
est réussie (retourne 0):
a_command && second_command
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 si l' a_command
ou other_command
d'échec, fallback_command
seront exécutées:
(a_command && other_command) || fallback_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
e=$? # return code from if
if [ "${e}" -eq "1"]; then
echo "Foo returned exit code 1"
elif [ "${e}" -gt "1"]; then
echo "Foo returned BAD exit code ${e}"
fi
fi
Voici deux simples bashfunctions qui permettent eventhandling dans bash:
Vous pouvez l'utiliser pour la base de exceptionhandling comme ceci:
onFoo(){
echo "onFoo() called width arg $1!"
}
foo(){
[[ -f /tmp/somefile ]] || throw EXCEPTION_FOO_OCCURED "some arg"
}
addListener EXCEPTION_FOO_OCCURED onFoo
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, ce qui est possible dans presque toutes les langues avec la matrice de support.
Si vous souhaitez conserver 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)