09. Bash: ciclos (while y until)

Publicado por

Como lo mencioné en la nota anterior existen tres formas de inducir un ciclo en Bash, en esa misma nota expliqué cómo hacerlo con un for por lo que en esta ocasión les platicaré las dos formas restantes: while y until.

While

El ciclo whilepermite ejecutar un bloque de instrucciones mientras se cumpla la condición. Primero comprueba que en efecto se cumple la condición dada y entonces, ejecuta el segmento de código contenido entre las palabras do y done,  así sucesivamente hasta que la condición no se cumpla.

Sintaxis

while [ condición ]
do
//Bloque de instrucciones
done

Ejemplo

#!/bin/bash
contador=0
termina=10

while [ $termina -ge $contador ]
do
  echo $contador
  let contador=$contador+1
done

Este ciclo imprime la serie de números del 0 al 10.

Until

El ciclo until, a diferencia del ciclo while, permite ejecutar un bloque de instrucciones mientras no se cumpla una condición dada. A diferencia del while, verifica que la condición sea falsa, entonces ejecuta el segmento de código contenido entre las palabrasdo y done, hasta que la condición se cumpla.

Sintaxis

until [ condición ]
do
//Bloque de instrucciones
done

Ejemplo

#!/bin/bash
contador=0
termina=10

until [ $termina -lt $contador ]
do
  echo $contador
  let contador=$contador+1
done

Este ciclo imprime la serie de números del 0 al 10.

Nótese que aunque en esencia este código es muy parecido al ejemplo del while, existe una diferencia en la condición dada ya que mientras con until se verifica si la condición es falsa, con while sucede lo contrario, es decir, que sea verdadera; por lo que en en el ejemplo de while se utiliza -gepara comparar si es mayor o igual y en el ejemplo de until se utiliza -ltpara comparar si es menor que.

Como te habrás dado cuenta, el uso del los ciclos while y until en Bash es muy fácil. Dependiendo del problema a resolver conviene utilizar uno u otro.

En la siguiente nota te platicaré sobre el tema Bash: arreglos y aritmética. Hasta entonces.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *