educación, informática y demás

GNU/Linux bash

Estado de salida de un comando

Todo comando que ejecutamos en una terminal o shell cuando termina su ejecución devuelve un código de salida o estado de salida. (Código de salida en GNU/Bash)

Se trata de un valor numérico que indica si el comando ha tenido éxito o si se ha producido algún error en su ejecución.

Nosotros, los usuarios, no somos conscientes de este estado de salida de los comandos que ejecutamos, puesto que no se muestra. Al usuario se le muestra información del propio comando que le indicará si ha habido un error, a través de la salida de error que por defecto es la pantalla. Si todo ha ido bien el comando mostrará información sobre su ejecución o no mostrará nada, si el comando no tiene que mostrar información en pantalla.

Por ejemplo, vamos a ejecutar el comando ls, una con un error y otra sin error:

Como humanos, tenemos claro que el primer comando ha funcionado correctamente y el segundo no, puesto que podemos leer la salida en pantalla que nos muestra la ejecución del comando.

El estado de salida se utiliza internamente para que bash pueda utilizar herramientas como listas de comandos y sentencias condicionales, que veremos más adelante.

Podemos consultar el código de salida de un comando recién ejecutado con la variable especial $? (Special parameters).

Si el comando se ejecuta correctamente, sin errores, el estado de salida es 0.

Si el comando tiene alg´ún error en su ejecución, el código o estado de salida será distinto de 0.

Como humanos esta información no es importante, puesto que podemos ver el mensaje de error. No obstante, como administradores de sistema este código de salida si es importante, puesto que podemos tenerlo en cuenta en nuestros scripts y podemos comprobar, por ejemplo, si se ha ejecutado correctamente o no un comando o aplicación y realizar una acción u otra en función de esto.

Comprobar si un usuario está conectado al sistema

Comando if

  1. Un grep que no muestra coincidencia falla.
  2. El código de salida de una tubería será el del último comando de la tubería

En este caso el código de salida es 0 porque no hay errores en el último comando de la tubería. Grep ha encontrado al menos una línea que se corresponde con el patrón.

A alto nivel podríamos decir que ha funcionado porque ha encontrado al usuario.

Si el comando detrás del if se ejecuta correctamente, es decir devuelve un código de salida 0, entonces se ejecuta el comando que está detrás de then.

En este caso, como el comando ha devuelto un código de salida 0, porque se ha ejecutado correctamente, se ejecutarán los comandos que están en la rama del then.

Para aprender más sobre sentencias condicionales, consulta la entrada sobre sentencias condicionales en www.educatica.es.

Dejar una respuesta