Uso de exit en Shell Script
El uso de exit permite saber al usuario si una acción se ha realizado correctamente o no. Cuando un comando se ha ejecutado correctamente, devuelve 0. En caso contrario, devuelve otro valor. Ese valor muchas veces es 1, pero no siempre es así. Podemos comprobar el valor devuelto con $?.
Vamos a ejecutar una instrucción correctamente y vamos a comprobar el valor de $?:
$ ls directorio_vacio/ $ echo $? 0
Y ahora vamos a ejecutar una instrucción con un fallo, por ejemplo, un ls sobre un directorio que no existe:
$ ls directorio_ ls: no se puede acceder a 'directorio_': No existe el archivo o el directorio $ echo $? 2
Vemos que cuando lanzamos una instrucción que no se ejecuta correctamente, el valor devuelto es mayor que 0.
Normalmente el valor que devuelve un comando cuando ha habido un problema es 1, cuando devuelve 2 suele ser porque ha recibido mal un parámetro o ha habido un problema con los permisos.
Uso de exit en nuestros scripts
Del mismo modo, para facilitar a otros usuarios el que puedan comprobar si un script se ha ejecutado correctamente, deberíamos devolver valores con exit. 0 si se ha ejecutado todo bien y un valor superior si ha habido cualquier problema.
Para ello, sólo tenemos que escribir en nuestros scripts:
exit 0
O el valor que queramos que devuelva.
Si hacemos un script que liste los ficheros de un directorio en caso de que el directorio exista pero que si no existe, no nos devuelva un error por pantalla, podemos hacer:
#!/bin/bash if [ -d $1 ] then for file in $(ls $1) do echo $file done exit 0 else exit 1 fi
Y ahora vamos a comprobar si devuelve distinto valor si le pasamos como argumento un directorio que existe y otro que no existe:
$ ./listfiles.sh directorio_vacio/ $ echo $? 0 $ ./listfiles.sh directorio_ $ echo $? 1
De esta manera tan sencilla estamos facilitando la tarea a aquellos que usen nuestros scripts. Y a nosotros mismos cuando los usemos.