Contenido
Hasta ahora tus scripts ejecutaban instrucciones una detrás de otra. Eso está bien, pero es limitado. Para tomar decisiones en un script necesitas condiciones: comprobar valores, comparar texto o números, verificar si existen archivos, etc.
Este módulo introduce las herramientas para que un script pueda responder dinámicamente a distintas situaciones.
1. El bloque if en Bash
La estructura básica es:
if [ condición ]; then
comandos
fi
Ejemplo:
numero=10
if [ $numero -gt 5 ]; then
echo "El número es mayor que 5"
fi
El then va en la misma línea que if, o en la siguiente separado por ;.
2. if / elif / else
Para varias condiciones se usa elif (“else if”):
if [ condición1 ]; then
comandos
elif [ condición2 ]; then
comandos
else
comandos por defecto
fi
Ejemplo:
edad=15
if [ $edad -ge 18 ]; then
echo "Mayor de edad"
else
echo "Menor de edad"
fi
3. Tipos de comparaciones
Hay dos grandes tipos: numéricas y de cadenas.
3.1 Comparaciones numéricas
Se usan operadores de una sola palabra:
-eq→ igual-ne→ distinto-gt→ mayor que (“greater than”)-ge→ mayor o igual-lt→ menor que-le→ menor o igual
Ejemplo:
if [ $x -lt 100 ]; then
echo "x es menor que 100"
fi
3.2 Comparaciones de cadenas
Se usan:
=→ igual!=→ distinto-z→ cadena vacía-n→ cadena NO vacía
Ejemplos:
if [ "$nombre" = "Ana" ]; then
echo "Hola Ana"
fi
if [ -z "$variable" ]; then
echo "La variable está vacía"
fi
Importante entrecomillar variables para evitar errores cuando están vacías.
4. Comparación avanzada con [[ ]]
Bash también admite [[ ]], que permite hacer comparaciones más modernas y usar patrones (==, !=, comodines).
Ejemplo:
if [[ $animal == "gato" ]]; then
echo "Es un gato"
fi
Permite patrones:
if [[ $nombre == A* ]]; then
echo "El nombre empieza por A"
fi
5. Operadores lógicos (&&, ||)
Se pueden combinar condiciones:
&&→ Y lógico||→ O lógico
Ejemplo:
if [ $edad -ge 18 ] && [ $edad -lt 65 ]; then
echo "Adulto en edad laboral"
fi
Otro ejemplo con ||:
if [ "$respuesta" = "S" ] || [ "$respuesta" = "s" ]; then
echo "Respuesta afirmativa"
fi
6. Condiciones sobre archivos
En administración de sistemas esto se usa TODO el tiempo.
Operadores útiles:
-f archivo→ existe y es archivo regular-d ruta→ existe y es directorio-r archivo→ se puede leer-w archivo→ se puede escribir-x archivo→ se puede ejecutar
Ejemplos:
if [ -d /etc ]; then
echo "/etc existe"
fi
if [ -f datos.txt ]; then
echo "El archivo datos.txt existe"
fi
7. El comando test
[ ] es un alias de test.
Las siguientes líneas son equivalentes:
if [ $x -gt 10 ]
y
if test $x -gt 10
No cambia nada en lógica, pero conviene conocerlo porque se ve mucho en scripts antiguos.
8. El case: otra forma de decidir
Cuando hay muchas opciones, case evita varios elif seguidos.
Sintaxis:
case $variable in
opción1)
comandos ;;
opción2)
comandos ;;
*)
comandos por defecto ;;
esac
Ejemplo:
read -p "Introduce una letra: " letra
case $letra in
a|A) echo "Has pulsado A" ;;
b|B) echo "Has pulsado B" ;;
*) echo "Opción no reconocida" ;;
esac
Muy útil para menús interactivos.
9. Ejemplos
Ejemplo 1: Verificar si un archivo existe
#!/bin/bash
if [ -f "$1" ]; then
echo "El archivo $1 existe."
else
echo "El archivo $1 no existe."
fi
Ejemplo 2: Verificar si un usuario es mayor de edad
#!/bin/bash
read -p "Introduce tu edad: " edad
if [ $edad -ge 18 ]; then
echo "Eres mayor de edad."
else
echo "Eres menor de edad."
fi
Ejemplo 3: Menú con case
#!/bin/bash
echo "1) Mostrar fecha"
echo "2) Mostrar usuario"
echo "3) Salir"
read -p "Elige una opción: " opcion
case $opcion in
1) date ;;
2) echo "Usuario: $USER" ;;
3) echo "Adiós" ;;
*) echo "Opción no válida" ;;
esac
Ejercicios propuestos
Ejercicio 1:
Crear un script mayor.sh que pida un número y diga si es mayor, menor o igual que 100.
Ejercicio 2:
Crear un script existe.sh que reciba un nombre de archivo como parámetro y diga si existe y si es archivo o directorio.
Ejercicio 3:
Crear un script menu.sh que muestre tres opciones con case:
- Mostrar nombre de usuario
- Mostrar fecha
- Salir
Ejercicio 4:
Crear un script login.sh que pida usuario y contraseña y verifique:
- Si el usuario es «admin»
- Si la contraseña es «secreto»
Mostrará “Acceso permitido” o “Acceso denegado”.
Soluciones
✅ Ejercicio 1 — mayor.sh
Enunciado:
Pedir un número y decir si es mayor, menor o igual que 100.
Solución:
#!/bin/bash
# Script: mayor.sh
# Compara un número con 100
read -p "Introduce un número: " num
if [ "$num" -gt 100 ]; then
echo "$num es mayor que 100"
elif [ "$num" -lt 100 ]; then
echo "$num es menor que 100"
else
echo "$num es igual a 100"
fi
Ejemplo de uso:
Entrada: 120
Salida: 120 es mayor que 100
✅ Ejercicio 2 — existe.sh
Enunciado:
Recibir un nombre de archivo/directorio como parámetro y comprobar:
- Si existe
- Si es archivo o directorio
Solución con validación básica:
#!/bin/bash
# Script: existe.sh
# Comprueba si un archivo/directorio existe
if [ $# -ne 1 ]; then
echo "Uso: $0 nombre_archivo"
exit 1
fi
ruta="$1"
if [ -e "$ruta" ]; then
if [ -f "$ruta" ]; then
echo "$ruta existe y es un archivo"
elif [ -d "$ruta" ]; then
echo "$ruta existe y es un directorio"
else
echo "$ruta existe, pero no es archivo ni directorio común"
fi
else
echo "$ruta no existe"
fi
Ejemplo de uso:
./existe.sh /etc
Salida:
/etc existe y es un directorio
✅ Ejercicio 3 — menu.sh
Enunciado:
Crear un menú con case que muestre tres opciones:
- Mostrar nombre de usuario
- Mostrar fecha
- Salir
Solución:
#!/bin/bash
# Script: menu.sh
# Menú básico con case
echo "Menú:"
echo "1) Mostrar nombre de usuario"
echo "2) Mostrar fecha"
echo "3) Salir"
read -p "Elige una opción: " opcion
case "$opcion" in
1)
echo "Usuario: $USER"
;;
2)
echo "Fecha actual: $(date +"%Y-%m-%d %H:%M:%S")"
;;
3)
echo "Saliendo..."
;;
*)
echo "Opción no válida"
;;
esac
Ejemplo:
Entrada: 2
Salida (aprox):
Fecha actual: 2026-01-11 18:42:00
✅ Ejercicio 4 — login.sh
Enunciado:
Pedir usuario y contraseña y verificar:
- usuario == admin
- contraseña == secreto
Si coincide: Acceso permitido
Si no: Acceso denegado
Solución:
#!/bin/bash
# Script: login.sh
# Verificación simple de usuario/contraseña
read -p "Usuario: " usuario
read -s -p "Contraseña: " password
echo
if [ "$usuario" = "admin" ] && [ "$password" = "secreto" ]; then
echo "Acceso permitido"
else
echo "Acceso denegado"
fi
Ejemplo:
Entrada:
Usuario: admin
Contraseña: secreto
Salida:
Acceso permitido






![11. [Reto] Bash Incremental: Aprender Shell a Golpes de Ejemplos 021c8028-9a76-4b0a-90e1-d0617edc9d94](https://laaventuradeaprender.com/wp-content/uploads/2026/01/021c8028-9a76-4b0a-90e1-d0617edc9d94.webp)

