until con Bash

Estructura de control until para Linux

La estructura de control until en Linux nos permite incluir un bucle en nuestro script. Junto al bucle for y a la estructura de control while, es otra forma para repetir bloques de código.

Con el bucle until (hasta) ejecutaremos el bloque de código hasta que se cumpla la condición.

until condición
do
    # Bloque de código a ejecutar mientras la condición no se cumpla
done
  • Evaluamos la condición y si la condición es falsa el código se ejecuta.
  • Volvemos a evaluar la condición.

Un ejemplo sencillo utilizando la estructura de control until con Linux.

#!/bin/bash

contador=1

until [ $contador -ge 6 ]
do
    echo $contador
    contador=$((contador + 1))
done

Ahora vamos a generar en forma de bucle un número aleatorio y lo mostraremos por nuestro terminal. Mostraremos números siempre que su valor sea diferente a un número mayor de mil pero inferior a tresmil. Entonces saldremos de la estructura de control.

Comparaciones numéricas con Bash

  • -eq: Igual a (equal).
  • -ne: diferente de (not equal).
  • -gt: mayor que (greater than).
  • -lt: Menor que (less than).
  • -ge: Mayor o igual que (greater than or equal).
  • -le: Menor o igual que (less than or equal).

Si el número generado es > 1000 AND < 3000 dejamos de generar números. Para realizar esta validación haremos uso del condicional if de Bash y las comparaciones numéricas.

#!/bin/bash

aleatorio=$RANDOM

until [[ $aleatorio -ge 1000 && $aleatorio -le 3000 ]]
do
    echo $aleatorio
    aleatorio=$RANDOM
done
Estructura until con Linux

Basando la condición en comandos externos

Vamos a realizar un ejemplo algo más complejo usando la estructura de control until de Linux.

Crearemos ficheros de texto en un directorio hasta que el número total de ficheros de ese directorio sea igual a quince.

ls -l | grep -v '^d' | wc -l
#!/bin/bash

condicion=$(ls -l | grep -v '^d' | wc -l)

until [ $condicion -eq 15 ];
do 
    nombre="$RANDOM.txt" 
    touch $nombre
    echo "Creado el archivo $nombre"
    condicion=$(ls -l | grep -v '^d' | wc -l)
done

Dejar un comentario

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