viernes, 17 de febrero de 2017

Estado de salida

Los comandos (incluyendo los scripts y las funciones de shell que escribamos) envían un valor al sistema cuando terminan, llamado estado de salida. Este valor, que es un entero dentro del rango de 0 a 255, indica el éxito o fracaso de la ejecución del comando. Por convención, un valor de cero indica éxito y cualquier otro valor indica fracaso. El shell proporciona un parámetro que puede usarse para examinar el estado de salida. Aquí lo vemos en acción:

[me@linuxbox ~]$ ls -d /usr/bin
/usr/bin
[me@linuxbox ~]$ echo $?
0
[me@linuxbox ~]$ ls -d /bin/usr
ls: cannot access /bin/usr: No such file or directory
[me@linuxbox ~]$ echo $?
2

En este ejemplo, ejecutamos el comando ls dos veces. La primera vez, el comando se ejecuta con éxito. Si mostramos el valor del parámetro $?, vemos que es un cero. Ejecutamos el comando ls una segunda vez, produciendo un error, y examinamos el parámetro $? otra vez. Esta vez contiene un 2, indicando que el comando ha encontrado un error. Algunos comandos usan estados de salida diferentes para proporcionar diagnósticos de error, mientras que muchos comandos simplemente salen con el valor uno cuando fallan. Las man pages incluyen a menudo una sección llamada "Estado de salida" describiendo qué códigos se usan. Sin embargo, un cero siempre indica éxito.

El shell proporciona dos comandos extremadamente simples que no hacen nada excepto terminar con un cero o un uno en el estado de salida. El comando true siempre se ejecuta con éxito y el comando false siempre se ejecuta sin éxito:

[me@linuxbox ~]$ true
[me@linuxbox ~]$ echo $?
0
[me@linuxbox ~]$ false
[me@linuxbox ~]$ echo $?
1

Podemos usar estos comandos para ver cómo funcionan las sentencias if. Lo que la sentencia if hace en realidad es evaluar el éxito o el fracaso de los comandos:

[me@linuxbox ~]$ if true; then echo "It's true."; fi
It's true.
[me@linuxbox ~]$ if false; then echo "It's true."; fi
[me@linuxbox ~]$

El comando echo "It's true." se ejecuta cuando el comando que sigue a if se ejecuta con éxito, y no se ejecuta cuando el comando que sigue a if no se ejecuta con éxito. Si es una lista de comandos lo que sigue a if, el que se evalua es el último comando de la lista:

[me@linuxbox ~]$ if false; true; then echo "It's true."; fi
It's true.
[me@linuxbox ~]$ if true; false; then echo "It's true."; fi
[me@linuxbox ~]$

No hay comentarios:

Publicar un comentario