Bucles en Scripting de Bash

ShellBeginner
Practicar Ahora

Introducción

En esta práctica de laboratorio, aprenderás a utilizar bucles en la programación de scripts de Bash. Los bucles son herramientas potentes que te permiten repetir un conjunto de instrucciones varias veces, lo que hace que tus scripts sean más eficientes y versátiles. Cubriremos tres tipos de bucles: for, while y until. Además, explorarás las sentencias break y continue, que proporcionan un control preciso sobre la ejecución de los ciclos. Esta sesión está diseñada para principiantes y te guiará paso a paso a través de cada concepto.

Esta es una Práctica Guiada, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que esta es una práctica de nivel principiante con una tasa de finalización del 98%. Ha recibido una tasa de valoraciones positivas del 100% por parte de los alumnos.

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 allí usando este comando:

cd /home/labex/project

Ahora, vamos a crear una nueva carpeta para nuestras pruebas:

mkdir bash_loops
cd bash_loops

Esto crea un directorio llamado bash_loops y entra en él. Utilizaremos esta ubicación para todos los ejercicios de esta sesión.

¿Por qué hacemos esto? Organizar tus scripts en directorios es una buena práctica profesional. Mantiene tu trabajo ordenado y facilita la localización 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 de esta lista, haz algo". Vamos a crear un script que demuestre cómo utilizarlo.

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 añade 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 símbolo @ significa "todos los elementos del array", y las comillas junto con las llaves aseguran que cada elemento se trate como un ítem individual, incluso si contiene espacios.

Guarda el archivo y dale permisos de ejecución con este comando:

chmod +x for_loop.sh

El comando chmod +x hace que el archivo sea ejecutable, lo que significa que puedes correrlo 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 numéricos.

El bucle while

El bucle while ejecuta un bloque de código mientras una condición específica sea verdadera. Es como decir: "Mientras esta condición se cumpla, 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 añade 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!"

Desglosemos este script:

  1. Comenzamos con count=5 para establecer nuestro valor inicial de cuenta regresiva.
  2. La condición [ $count -gt 0 ] significa "mientras el contador sea mayor que 0".
  3. Dentro del bucle, imprimimos el valor actual, lo disminuimos en 1 y esperamos un segundo.
  4. Esto continúa hasta que el contador llega a 0, momento en el que 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 deje de ser verdadera.

El bucle until

El bucle until es similar al bucle while, pero con una diferencia fundamental: continúa ejecutándose hasta que una condición específica se vuelva verdadera. Es como decir: "Sigue haciendo esto hasta que pase aquello".

Crea un nuevo archivo llamado until_loop.sh:

touch until_loop.sh

Abre el archivo until_loop.sh en el WebIDE y añade 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. Empezamos con count=1 como valor inicial.
  2. La condición [ $count -gt 5 ] significa "hasta que el contador sea mayor que 5".
  3. Dentro del bucle, imprimimos el valor actual, lo incrementamos en 1 y esperamos un segundo.
  4. Esto continúa hasta que el contador es mayor que 5, punto en el cual el bucle finaliza.

Guarda el archivo y hazlo ejecutable:

chmod +x until_loop.sh

Ahora, ejecuta el script:

./until_loop.sh

Verás impresos los 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 se cumpla una condición.

Uso de las sentencias break y continue

Las sentencias break y continue se utilizan para controlar el flujo de los bucles. break sale del bucle prematuramente, mientras que continue omite el resto de la iteración actual y salta directamente 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 añade 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

Desglosemos este script:

  1. En el primer bucle, usamos break para salir del ciclo 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 verifica si un número es par (divisible por 2 sin resto).

El operador % calcula el resto de una división. Por lo tanto, i % 2 será 0 para los números pares y 1 para los 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 finalizar un bucle antes de tiempo y cómo continue puede omitir ciertas iteraciones basándose en una condición.

Resumen

En esta práctica de laboratorio, has aprendido sobre tres tipos de bucles en la programación de scripts de Bash:

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

También has aprendido sobre las sentencias break y continue, que te otorgan un mayor control sobre el comportamiento de tus bucles.

Estas estructuras de repetición 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 con su funcionamiento y sus casos de uso.