Bucles en scripting de Bash

ShellShellBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo usar bucles en scripting de Bash. Los bucles son herramientas poderosas que te permiten repetir un conjunto de instrucciones varias veces, lo que hace que tus scripts sean más eficientes y flexibles. Cubriremos tres tipos de bucles: for, while y until. Además, explorarás las declaraciones break y continue, que brindan control sobre la ejecución del bucle. Este laboratorio está diseñado para principiantes y te guiará a través de cada concepto paso a paso.

Configuración del entorno

Comencemos configurando nuestro entorno de trabajo. Crearemos un nuevo directorio para almacenar todos nuestros experimentos con bucles.

Abre una terminal en el WebIDE. Por defecto, deberías estar en el directorio /home/labex/project. Si no estás seguro, siempre puedes navegar hasta allí usando este comando:

cd /home/labex/project

Ahora, creemos un nuevo directorio para nuestros experimentos con bucles:

mkdir bash_loops
cd bash_loops

Esto crea un nuevo directorio llamado bash_loops y cambia al mismo. Usaremos este directorio para todos nuestros experimentos con bucles.

¿Por qué estamos haciendo esto? Organizar tus scripts en directorios es una buena práctica. Mantiene tu trabajo ordenado y facilita la búsqueda y gestión de tus archivos.

El bucle for

El bucle for se utiliza para iterar sobre una lista de valores. Es como decir: "Para cada elemento en esta lista, haz algo". Creemos un script que demuestre cómo usar un bucle for.

Crea un nuevo archivo llamado for_loop.sh en el directorio bash_loops:

touch for_loop.sh

Ahora, abre el archivo for_loop.sh en el WebIDE y agrega el siguiente contenido:

#!/bin/bash

## Loop through an array of names
echo "Looping through an array:"
NAMES=("Alice" "Bob" "Charlie" "David")
for name in "${NAMES[@]}"; do
  echo "Hello, $name!"
done

echo ## Print an empty line for readability

## Loop through a range of numbers
echo "Looping through a range of numbers:"
for i in {1..5}; do
  echo "Number: $i"
done

Analicemos lo que hace este script:

  1. El primer bucle recorre un array de nombres. Para cada nombre en el array, imprime un saludo.
  2. El segundo bucle utiliza un rango {1..5} para contar del 1 al 5.

La sintaxis "${NAMES[@]}" puede parecer extraña. El @ significa "todos los elementos del array", y las comillas y las llaves aseguran que cada elemento se trate como un elemento separado, incluso si contiene espacios.

Guarda el archivo y hazlo ejecutable con este comando:

chmod +x for_loop.sh

El comando chmod +x hace que el archivo sea ejecutable, lo que significa que puedes ejecutarlo como un programa.

Ahora, ejecuta el script:

./for_loop.sh

Deberías ver una salida como esta:

Looping through an array:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
Hello, David!

Looping through a range of numbers:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5

Esto demuestra cómo los bucles for pueden iterar tanto sobre arrays como sobre rangos de números.

El bucle while

El bucle while ejecuta un bloque de código siempre que una condición especificada sea verdadera. Es como decir: "Mientras esta condición sea verdadera, sigue haciendo esto".

Crea un nuevo archivo llamado while_loop.sh:

touch while_loop.sh

Abre el archivo while_loop.sh en el WebIDE y agrega el siguiente contenido:

#!/bin/bash

## Simple countdown using a while loop
count=5
echo "Countdown:"
while [ $count -gt 0 ]; do
  echo $count
  count=$((count - 1))
  sleep 1 ## Wait for 1 second
done
echo "Blast off!"

Analicemos este script:

  1. Comenzamos con count=5 para establecer nuestro valor inicial de cuenta regresiva.
  2. La condición [ $count -gt 0 ] significa "mientras count sea mayor que 0".
  3. Dentro del bucle, imprimimos el valor actual de count, lo disminuimos en 1 y esperamos un segundo.
  4. Esto continúa hasta que count alcanza 0, momento en el cual el bucle termina.

El comando sleep 1 pausa el script durante 1 segundo, creando un efecto de cuenta regresiva en tiempo real.

Guarda el archivo y hazlo ejecutable:

chmod +x while_loop.sh

Ahora, ejecuta el script:

./while_loop.sh

Verás una cuenta regresiva del 5 al 1, con una pausa de un segundo entre cada número:

Countdown:
5
4
3
2
1
Blast off!

Esto demuestra cómo un bucle while puede repetir una acción hasta que una condición ya no sea verdadera.

El bucle until

El bucle until es similar al bucle while, pero con una diferencia importante: continúa ejecutándose hasta que una condición especificada se vuelve verdadera. Es como decir: "Sigue haciendo esto hasta que esta condición sea verdadera".

Crea un nuevo archivo llamado until_loop.sh:

touch until_loop.sh

Abre el archivo until_loop.sh en el WebIDE y agrega el siguiente contenido:

#!/bin/bash

## Count up to 5 using an until loop
count=1
echo "Counting up to 5:"
until [ $count -gt 5 ]; do
  echo $count
  count=$((count + 1))
  sleep 1 ## Wait for 1 second
done

Analicemos este script:

  1. Comenzamos con count=1 como nuestro valor inicial.
  2. La condición [ $count -gt 5 ] significa "hasta que count sea mayor que 5".
  3. Dentro del bucle, imprimimos el valor actual de count, lo incrementamos en 1 y esperamos un segundo.
  4. Esto continúa hasta que count se vuelve mayor que 5, momento en el cual el bucle termina.

Guarda el archivo y hazlo ejecutable:

chmod +x until_loop.sh

Ahora, ejecuta el script:

./until_loop.sh

Verás impresa la secuencia de números del 1 al 5, con una pausa de un segundo entre cada uno:

Counting up to 5:
1
2
3
4
5

Esto demuestra cómo un bucle until puede repetir una acción hasta que una condición se vuelva verdadera.

Uso de las declaraciones break y continue

Las declaraciones break y continue se utilizan para controlar el flujo de los bucles. break sale de un bucle antes de tiempo, mientras que continue salta el resto de la iteración actual y pasa a la siguiente.

Crea un nuevo archivo llamado break_continue.sh:

touch break_continue.sh

Abre el archivo break_continue.sh en el WebIDE y agrega el siguiente contenido:

#!/bin/bash

## Using break to exit a loop early
echo "Demonstration of break:"
for i in {1..10}; do
  if [ $i -eq 6 ]; then
    echo "Breaking the loop at $i"
    break
  fi
  echo $i
done

echo ## Print an empty line for readability

## Using continue to skip iterations
echo "Demonstration of continue (printing odd numbers):"
for i in {1..10}; do
  if [ $((i % 2)) -eq 0 ]; then
    continue
  fi
  echo $i
done

Analicemos este script:

  1. En el primer bucle, usamos break para salir del bucle cuando i es igual a 6.
  2. En el segundo bucle, usamos continue para saltar los números pares. La condición $((i % 2)) -eq 0 comprueba si un número es par (divisible por 2 sin resto).

El operador % calcula el resto después de la división. Entonces, i % 2 será 0 para los números pares y 1 para los números impares.

Guarda el archivo y hazlo ejecutable:

chmod +x break_continue.sh

Ahora, ejecuta el script:

./break_continue.sh

Deberías ver una salida como esta:

Demonstration of break:
1
2
3
4
5
Breaking the loop at 6

Demonstration of continue (printing odd numbers):
1
3
5
7
9

Esto demuestra cómo break puede salir de un bucle antes de tiempo y cómo continue puede saltar ciertas iteraciones basadas en una condición.

Resumen

En este laboratorio, has aprendido sobre tres tipos de bucles en scripting de Bash:

  1. Los bucles for, que iteran sobre una lista de elementos o un rango de números.
  2. Los bucles while, que continúan mientras una condición sea verdadera.
  3. Los bucles until, que continúan hasta que una condición se vuelva verdadera.

También has aprendido sobre las declaraciones break y continue, que te dan más control sobre tus bucles.

Estas estructuras de bucle son fundamentales para muchos scripts y te permitirán automatizar tareas repetitivas de manera eficiente. Practica el uso de estos bucles en tus propios scripts para familiarizarte más con su comportamiento y casos de uso.