scripts script pasar parametros operaciones manejo espaƱol ejemplos comandos cadenas aritmeticas bash shell exception-handling

bash - pasar - Manejo de excepciones en scripts de shell



shell script ejemplos (4)

Estoy buscando el mecanismo de manejo de excepciones en el script de shell. ¿Hay alguna prueba, capturar un mecanismo equivalente en el script de shell?


Aquí hay dos funciones bash simples que permiten el manejo de eventos en bash:

Podrías usarlo para una excepción básica como esta:

onFoo(){ echo "onFoo() called width arg $1!" } foo(){ [[ -f /tmp/somefile ]] || throw EXCEPTION_FOO_OCCURED "some arg" } addListener EXCEPTION_FOO_OCCURED onFoo

Exceptionhandling usando try / catch blocks no es soportado en bash, sin embargo, puede intentar mirar el framework BANGSH que lo soporta (es un poco como jquery para bash).

Sin embargo , el manejo de excepciones sin try / catch-blocks en cascada es similar al manejo de eventos , que es posible en casi cualquier idioma con array-support.

Si desea mantener su código limpio y ordenado (sin verbosidad if / else), le recomendaría utilizar eventos.

La sugerencia que MatToufoutu recomienda (usando || y &&) no se recomienda para funciones, pero está bien para comandos simples . (ver BashPitfalls sobre los riesgos)


La estructura if / else y los códigos de salida pueden ayudarte a fingir algo de eso. Esto debería funcionar en Bash o 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


No hay realmente un try/catch en bash (supongo que estás usando bash), pero puedes lograr un comportamiento bastante similar usando && o || .

En este ejemplo, desea ejecutar a_command si falla un a_command (devuelve un valor distinto de cero):

a_command || fallback_command

Y en este ejemplo, desea ejecutar second_command si a_command tiene éxito (devuelve 0):

a_command && second_command

Pueden mezclarse fácilmente utilizando una subshell, por ejemplo, el siguiente comando ejecutará a_command , si tiene éxito, ejecutará other_command , pero si a_command u a_command falla, se ejecutará a_command :

(a_command && other_command) || fallback_command


{ # command which may fail and give an error } || { # command which should be run instead of the above failing command }