Condiciones if
, else
y bucles for
, while
en bash
1. Condicionales en bash: if
, else
, y un poco de magia
¿Para qué sirven los condicionales?
Los condicionales permiten que tu script tome decisiones basadas en datos de entrada, variables o incluso resultados de ejecución de comandos. Por ejemplo, quieres verificar si existe un archivo o asegurarte de que un servidor está disponible antes de realizar la siguiente acción. Aquí es donde entra la construcción if
.
Sintaxis básica
Así es como se ve un clásico condicional if
en bash:
if [ condición ]; then
# Aquí se ejecuta el código si la condición es verdadera
echo "¡Condición cumplida!"
else
# Aquí se ejecuta el código si la condición es falsa
echo "¡Condición no cumplida!"
fi
Palabras clave:
if
,then
,else
, yfi
(cierra el bloqueif
) — son palabras mágicas. Sin ellas, el script no funcionará.- Los corchetes
[ ... ]
se usan para verificar condiciones.
Ejemplo 1: Verificar existencia de un archivo
#!/bin/bash
FILE="/etc/passwd"
if [ -f $FILE ]; then
echo "El archivo $FILE existe."
else
echo "El archivo $FILE no se encuentra."
fi
Explicación:
-f
verifica si el archivo existe.- Si el archivo existe, el comando
echo
imprime un mensaje al respecto. Si no, se ejecuta el bloqueelse
.
Condicionales con comandos
Puedes usar el resultado de la ejecución de un comando como condición, ya que en Linux todo es un comando.
Ejemplo 2: Verificar disponibilidad de un sitio web
#!/bin/bash
if ping -c 1 example.com &> /dev/null; then
echo "El sitio web está disponible."
else
echo "El sitio web no está disponible."
fi
Explicación:
ping -c 1
envía una solicitud al servidor. Si responde, la condición se cumple.&> /dev/null
oculta la salida del comando para no saturar la terminal.
Usando el operador elif
A veces, no basta solo con if
y else
. Necesitas considerar múltiples condiciones. Aquí es donde entra elif
.
Ejemplo 3: Determinar la hora del día
#!/bin/bash
HOUR=$(date +%H)
if [ $HOUR -lt 12 ]; then
echo "¡Buenos días!"
elif [ $HOUR -lt 18 ]; then
echo "¡Buenas tardes!"
else
echo "¡Buenas noches!"
fi
Explicación:
date +%H
devuelve la hora actual en formato de 24 horas.- Comparamos la hora actual con valores fijos: si es menor a 12 — mañana, menor a 18 — tarde, de lo contrario — noche.
2. Bucles en bash: la repetición es la madre del aprendizaje
Los bucles son una manera de hacer que tu script repita acciones mientras se cumpla una condición específica. Esto es especialmente útil si necesitas procesar muchos archivos, repetir tareas varias veces o esperar a que ocurra un evento.
Bucle for
for
recorre una lista de valores (por ejemplo, archivos o números) y ejecuta una acción para cada uno de ellos.
Ejemplo 4: Un bucle for
sencillo
#!/bin/bash
for i in {1..5}; do
echo "Esta es la iteración número $i"
done
Explicación:
{1..5}
— lista de números del 1 al 5.- En cada iteración, la variable
i
toma un valor de la lista.
Ejemplo 5: Recorrer archivos en un directorio
#!/bin/bash
for FILE in /etc/*; do
echo "Procesando archivo: $FILE"
done
Explicación:
/etc/*
— esta es la lista de todos los archivos en la carpeta/etc
.- En cada iteración, la variable
FILE
contiene el nombre de un archivo.
Bucle while
while
ejecuta acciones mientras se cumpla una condición.
Ejemplo 6: Adivina el número
#!/bin/bash
SECRET=5
GUESS=0
while [ $GUESS -ne $SECRET ]; do
echo "Introduce tu suposición (un número del 1 al 10):"
read GUESS
done
echo "¡Has acertado!"
Explicación:
[ $GUESS -ne $SECRET ]
— la condición continúa mientras el número introducidoGUESS
no sea igual al número secretoSECRET
.
Combinando bucles y condiciones
A veces, las condiciones y los bucles trabajan juntos.
Ejemplo 7: Verificando varios sitios web
#!/bin/bash
SITES=("example.com" "google.com" "nonexistent.website")
for SITE in ${SITES[@]}; do
if ping -c 1 $SITE &> /dev/null; then
echo "$SITE está disponible."
else
echo "$SITE no está disponible."
fi
done
Explicación:
- El array
SITES
contiene una lista de sitios web. for
recorre cada sitio web de la lista.if
verifica si el sitio web está disponible utilizandoping
.
3. Ejercicios prácticos
Comprobación de dominio
Escribe un script que tome un nombre de dominio como argumento y verifique su disponibilidad.
Pista:
if ping -c 1 $1 &> /dev/null; then
echo "Dominio disponible."
else
echo "Dominio no disponible."
fi
Trabajo con archivos
Escribe un script que verifique la existencia de varios archivos y muestre el resultado para cada uno de ellos.
Pista:
FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
if [ -f $FILE ]; then
echo "$FILE existe."
else
echo "$FILE no encontrado."
fi
done
Tabla de multiplicar
Escribe un script con bucles anidados que muestre la tabla de multiplicar para números del 1 al 10.
Pista:
for i in {1..10}; do
for j in {1..10}; do
echo -n "$((i * j)) "
done
echo ""
done
Ahora puedes añadir inteligencia y lógica a tus scripts en bash. Los condicionales te permitirán verificar estados y tomar decisiones, mientras que los bucles te ayudarán a automatizar tareas repetitivas. ¡Te esperan aún más posibilidades para automatizar tareas!
GO TO FULL VERSION