educatica!

educación, informática y demás

Estructuras de control. Comando if

Ejemplos de uso

Ejemplo 01 – Comprobar parámetros

Comprueba que se pasa algún valor ene l primer parámetro que recibe el script. Si no se pasa ningún valor motramos un mensaje de error y salimos con código de retorno de error.

Si se pasa un valor mostramos dicho valor.

La condición solo se cumplira si y solo si la variable que almacena el valor del primer está vacía. Además, si se entra en esa rama del if, al ejecutarse el comando exit, el script termina ahi y no se ejecutará nunca la línea 13.

Otro caso distinto sería si en el enunciado nos piden que no salgamos si no se pasa parámetro. Por ejemplo, si nos dijeran que si no se pasa parámetro mostremos una advertencia, un mensaje diciendo que no se ha pasado parámetro. Sino que mostremos el valor del parámetro pasado.

En este caso, tendríamos que utilizar una estructura if..then..else.

No obstante, seguimos con el enunciado inicial en el que si no se pasa parámetro no podemos continuar y tenemos que salir con un mensaje de error.

También podriamos utilizar la variable $# que contiene el número de parámetros que se han pasado al script. Para ello tendríamos que consultar la página de manual del comando test para ver como se comparan enteros.

Otra opción sería comparar el número de parámetros con 0. Si el número de parámetros pasados al script es cero, significa que no me han pasado ningún script.

¿Por qué no hemos usado un else?. Se podría haber utilizado un else para ejecutar el echo de la línea 13 si no se cumple la condición del if.

Sin embargo, como hay un exit en el bloque de comandos del if, en la línea 10, el echo de la línea 13 solo se ejecutará si no se cumple la condición del if. Si además, tuvieramos que seguir ejecutando más comandos del script, como por ejemplo comprobar si se ha pasado un segundo parámetro y después seguir realizando acciones, es mucho más legible no utilizar una rama else. ¡Ojo! esto sucede en este tipo de estructuras en las que si se cumple la condición terminamos la ejecución del script.

Este tipo de estructuras se utilizan mucho para comprobar alguna condición necesaria para que se pueda continuar ejecutando el script.

Como estamos realizando comprobaciones, si en alguno de los ifs se cumple la condición se terminará la ejecución del script con un código de error. Es más facil razonar o entener el script si lo planteamos así.

Ejemplo 02 – Ruta de un fichero

Vamos a crear un script que reciba por parámetro la ruta de un fichero o directorio del que mostrarems información de permisos propietario y grupo.

Debermos comprobar que se ha pasado algún valor en el primer parámetro. Si no es así, mostramos un mensaje de error y terminamos la ejecución del script.

La primera aproximación podría ser esta

Vamos a modificar un poco el script. Ahora, queremos que una vez nos han pasado una ruta por parámetro, vamos a comprobar si el fichero o directorio que nos han pasado por parámetor existe o no. Si no existe, mostraremos un mensaje de error y terminamos la ejecución del script.

El problema es que no sabemos que poner en la expresión del comando test para que compruebe si dada un ruta apunta a un fichero que existe.

De esta forma, podemos utilizar la opción -e y el not para negar la expresión. Así quedaría el script.

Vamos a modificar un poco el script añadiendo nueva funcionalidad. Si la ruta del fichero que me han pasado pertenece a un directorio, entonces, primero mostraremos los permisos, propietario y grupo del directorio, no de su contenido. Después mostraremos el contenido del directorio, pero sin mostrar información extendida. Si no es un directorio, mostramos información de permisos, propietario y grupo.

En este caso si es necesario un else, porque ejecutaremos una cosa y otra dependiendo de si la ruta es de un directorio o no. En los casos anteriores, si se cumplia la condición del if, la rama de ejecución por la que entramos, el bloque de comandos que se ejecutará terminan la ejecución del script. Por tanto, si se cumple la ejecución, no seguirá ejecutando tras mostrar el mensaje de error. En este caso, no es así, no es una comprobación, hacemos una cosa u otra en función de la condición.

Vamos a continuar ampliando el script. En este caso, una vez mostrada la información del fichero o directorio, queremos saber si tenemos permisos de lectura, escritura y ejecución sobre el fichero. Para ello tendremso que utilizar el comando test con alguna opción que nos permita conocer esta información.

Antes de nada, mostraremos el nombre del usuario con el que estamos trabajando.

Como no sabemos que opción upción utilizar con el comando test para comprobar si tenemos permiso de lectura, escritura o ejecución sobre un fichero, tendremos que consultar su página de manual.

Vamos a probarlo

Ejemplo 03 – calificacion.sh

Vamos a crear un script llamado calificacion.sh que debe recibir por parámetro una nota. Si no se pasa ningún parámetro, el script deberá mostrar un mensaje de error y terminar devolviendo un código de error.

Si la nota es menor que cinco deberá mostrar un mensaje diciendo que la calificaicón es suspenso. Sino deberá mostrar un mensaje indicando que la calificación es aprobado.

Tendremos que mirar en la página de manual de test para ver que opción utiliazr para comparar números enteros.

Vamos a mejorar nuestro script. Ahora vamos a comprobar que la nota no sea menor que cero ni mayor que 10. Si la nota es menor que cero o mayor que 10 debemos mostrar un mensaje de error y terminar la ejecución del script antes de mostrar la calificación.

Ahora tenemos que buscar en la página de manual del comando test como podemos comprobar que un valor sea menor que 0 o mayora que 10. Ahora mismo, con la ayuda que hemso consultado antes sabemos comparar que un núemro sea menor que 0 y sabemos comparar que un número sea mayor que 10. El problema es que no sabemos utilizar un «o lógico». Es decir, que se cumpla la condición si se cumple una condición o la otra.

Tendremos que utilizar -o.

Vamos a mejorar el script. Si la nota es mayor o igual que cinco, mostraremos un mensaje un poco más especializado. Si la nota está entre 5 y 6, mostraremos la cadena «Aprobado». Si la nota está entre 6 y 7 mostraremos la cadena «Bien». Si la nota está entre 7 y 9 mostraremso «Notable». Si la nota está entre 9 y 10 mostraremos sobresaliente.

Vamos a mejorar el script. Ahora vamos a recibir un segundo parámetro obligatorio, que será el nombre del alumno. Vamos a almacenar en un fichero llamado notas.log el nombre del alumno, la nota obtenida y la cadena de texto que cualifica la nota, separados por el delimitador de campos :.

El primer paso sería obtener el nombre del alumno por parámetro y comprobar que se pasa un valor.

Tema creado por Anders Norén