Ejemplos del Bucle While en Bash

El bucle while en Bash es una estructura de control que permite ejecutar repetidamente un conjunto de comandos mientras se cumpla una determinada condición. Se utiliza ampliamente en automatización de procesos, lectura de archivos, manejo de entrada de usuario y evaluación de opciones en la línea de comandos.

En esta guía, aprenderás desde los conceptos básicos hasta ejemplos avanzados del bucle while en Bash, incluyendo bucles infinitos, lectura de archivos, control de entrada del usuario y más.


Sintaxis Básica del Bucle While en Bash

La sintaxis de un bucle while en Bash es la siguiente:

while [ condición ]
do
   comando1
   comando2
   comando3
done
  • El bucle continuará ejecutándose mientras la condición sea verdadera.
  • La condición suele ser una expresión de comparación o el resultado de un comando.
  • Si la condición nunca cambia a false, se generará un bucle infinito.

Sintaxis en una sola línea:

while [ condición ]; do comandos; done

Ejemplo 1: Imprimir un Mensaje Varias Veces

Este script imprimirá «Bienvenido X veces» cinco veces:

#!/bin/bash
x=1
while [ $x -le 5 ]
do
  echo "Bienvenido $x veces"
  x=$(( x + 1 ))
done

Equivalente en una sola línea:

x=1; while [ $x -le 5 ]; do echo "Bienvenido $x veces"; x=$(( x + 1 )); done

Ejemplo 2: Cálculo del Factorial de un Número

Este script calcula el factorial de un número dado:

#!/bin/bash
contador=$1
factorial=1

# Verificar si el usuario proporcionó un número
if [ -z "$contador" ]; then
    echo "Uso: $0 <número>"
    exit 1
fi

# Calcular el factorial
while [ $contador -gt 0 ]
do
    factorial=$(( factorial * contador ))
    contador=$(( contador - 1 ))
done

echo "Factorial: $factorial"

Uso:

$ chmod +x factorial.sh
$ ./factorial.sh 5

Ejemplo 3: Leer un Archivo Línea por Línea

Un caso de uso común del bucle while es leer un archivo línea por línea:

#!/bin/bash
ARCHIVO="$1"

if [ -z "$ARCHIVO" ]; then
    echo "Uso: $0 <nombre de archivo>"
    exit 1
fi

# Leer el archivo línea por línea
while IFS= read -r linea
do
    echo "$linea"
done < "$ARCHIVO"

Uso:

$ chmod +x leer_archivo.sh
$ ./leer_archivo.sh miarchivo.txt

Ejemplo 4: Manejo de Opciones en la Línea de Comandos

Este ejemplo muestra cómo procesar opciones en la línea de comandos usando un bucle while y getopts:

while getopts "ae:f:hd:s:qx:" opcion
do
    case "${opcion}" in
        a) ALARMA="TRUE";;
        e) ADMIN=${OPTARG};;
        d) DOMINIO=${OPTARG};;
        f) ARCHIVO_SERVIDOR=${OPTARG};;
        s) SERVIDOR_WHOIS=${OPTARG};;
        q) SILENCIO="TRUE";;
        x) DIAS_ADVERTENCIA=${OPTARG};;
        \?) echo "Opción no válida"; exit 1;;
    esac
done

Este script permite gestionar múltiples opciones con flags y argumentos.


Ejemplo 5: Manejo de Entrada del Usuario en un Bucle Infinito

Puedes usar un bucle while infinito para solicitar entrada del usuario de manera continua:

#!/bin/bash
while :
do
    echo "Introduce dos números (o -1 para salir):"
    read a b
    if [ "$a" -eq -1 ]; then
        echo "Saliendo..."
        break
    fi
    resultado=$(( a + b ))
    echo "Suma: $resultado"
done

Ejemplo 6: Bloquear Direcciones IP desde un Archivo

El siguiente script lee una lista de direcciones IP desde un archivo y las bloquea usando iptables:

#!/bin/bash
IFS='#'  # Configurar el Separador de Campos Internos a #

ARCHIVO="ips_bloqueadas.txt"

while read -r ip comentario
do
   /sbin/iptables -A INPUT -s "$ip" -m comment --comment "$comentario" -j DROP
done < "$ARCHIVO"

Ejemplo de archivo (ips_bloqueadas.txt):

192.168.1.60#BLOQUEADO:www-2
105.20.10.26#BLOQUEADO:hacker
81.2.3.6#BLOQUEADO:spam

Este script procesa el archivo y aplica reglas de firewall en iptables.


Ejemplo 7: Salir de un Bucle con break

El comando break termina un bucle cuando se cumple una condición:

#!/bin/bash
contador=1
while [ $contador -le 10 ]
do
    if [ $contador -eq 5 ]; then
        echo "Saliendo del bucle en $contador"
        break
    fi
    echo "Contador: $contador"
    contador=$(( contador + 1 ))
done

Salida:

Contador: 1
Contador: 2
Contador: 3
Contador: 4
Saliendo del bucle en 5

Ejemplo 8: Omitir Iteraciones con continue

El comando continue salta la iteración actual y pasa a la siguiente:

#!/bin/bash
contador=0
while [ $contador -lt 10 ]
do
    contador=$(( contador + 1 ))
    if [ $(( contador % 2 )) -eq 0 ]; then
        continue
    fi
    echo "Número impar: $contador"
done

Este script imprime solo los números impares.


Resumen: Puntos Clave

  • Los bucles while ejecutan comandos mientras la condición sea verdadera.
  • Usa break para salir del bucle antes de que termine.
  • Usa continue para saltar una iteración.
  • Los bucles infinitos se pueden crear con while : (usa CTRL+C para detenerlos).
  • Los bucles while son útiles para leer archivos, manejar entrada del usuario, automatizar tareas y gestionar procesos del sistema.

Lecturas Recomendadas

Si deseas profundizar en el scripting en Bash, revisa estos recursos:

man bash
help while
help {
help break
help [
help continue

¿Te ha sido útil esta guía? ¡Prueba estos ejemplos en tu sistema Linux y cuéntame cómo te funcionaron!

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×