4.13.- Estructuras condicionales y bucles

La estructura básica de una condición sería:

Condición if – then – else – fi

Como veis la condición si (if) se cierra con su correspondiente fi que al parecer un juego de palabras es fácil de recordar. Entonces si la condición se cumple entraría por el then, en caso de que no, por el else. Pero este es un método simple, luego tenemos uno más complejo con if anidados, sería:

 Ahora lo que hace es evaluar la condición, si es verdadera entra por el then, pero si no y se da el caso de otra condición entraría por el elif, los elif no se cierran, solamente el fi final corresponde a la apertura del if. La condición es cualquier cosa que de un return (que devuelva) algo que sea 0 o verdadero. Notese el uso del archivo /dev/null como archivo vacío para comprobar algunas condicionales. Vemos como podemos hacer un script para comprobar que realmente la ruta es un directorio.

Vemos el resultado de este script:

Condicionales case

Su  estructuran es la siguiente:

 Un ejemplo de script al que llamaremos “menu.sh” o “menu“:

Y el resultado:

  •  Vaya ensayando con los ejemplos anteriores para coger más soltura con los comandos condicionales.

Ejemplo script menu

Vamos a ver algunos ejemplos que puedes modificar a tu gusto para coger soltura con la programación de script:

Ejemplo 1:

Este script muestra un menú, lee la opción introducida por el usuario y verifica con la ayuda de una estructura case la validez de su elección.

El carácter * significa cualquier otra cadena de caracteres.

Vemos el resultado:

Ejemplo 2:

Este script le llamaremos codpos que solicita la entrada de un código postal y verifica la validez de éste:

El resultado…

  • Continue ideando otros usos para la estructura case al final cogerá soltura con este comando.

Bucle for

La estructura de control for permite tratar una lista de valores representado por val1 val2 val3 valn. Con cada iteración del bucle, la variable var se va inicializando con uno de los valores de la lista en el mismo orden que se ha enumerado. La lista de valores puede citarse directamente o generarse por sustitución de caracteres especiales de shell.

Sintaxis:

Unos ejemplos

Script contador:

Resultado:

  • ¿Eres capaz de hacer que cuente desde 10 hasta 20? Animo!!!

Otro ejemplo:

Este script recibe una lista de nombres de archivo como argumento y da una indicación al usuario sobre el tipo de archivo para cada argumento de la lista. La lista de valores se genera por sustitución  de una variable $*.

Su resultado es:

Último ejemplo:

Este script utiliza valores citados directamente para mostrarlos por pantalla.

Y su resultado:

Bucle while

Antes de aprender a hacer un script utilizando los bucles while, debemos conocer el funcionamiento del comando test, pues es muy usado en este tipo de bucles. Permite verificar la existencia de archivos y ciertas condiciones de los mismos. Además permite la comparación de valores. La única finalidad del comando test es devolver una condición de terminación.

Si test no está predefinido en el Shell (es un comando aparte) es más eficiente el uso de case que el de un if con un test en la condición.

Test se puede resumir mediante: [ expresión ]. Por ejemplo:

test –f “$1” es igual a [ -f “$1” ]

El bucle while ejecuta un trozo de código si la expresión de control es verdadera, y sólo se para cuando es falsa (o se encuentra una interrupción explícita dentro del código en ejecución).

Su sintaxis es:

Sencillo ejemplo de while

 Después de ejecutar el ejemplo:

Bucle until

El bucle until es casi idéntico al bucle loop, excepto en que el código se ejecuta mientras la expresión de control se evalúe como falsa.

La estructura de control until permite la iteración hasta que un comando devuelve el código verdadero. A cada iteración del bucle, el comando especificado detrás de la palabra until se ejecuta. Cuando este devuelve un código falso, el shell ejecuta los comandos internos situados entre do y done, después vuelve a until para ejecutar de nuevo el comando. Tan pronto como éste último devuelve verdadero, el shell sale de until y ejecuta el comando situado inmediatamente después de done.

Sencillo ejemplo de until

Resultado:

 break y continue

Permiten salir de un bucle (break) o saltar a la siguiente iteración (continue).

  • Observa este listado donde encontramos las órdenes break y continue, adáptalo con otros ejemplos diseñados por ti.