Bash Script – DÍA 2
Condicionales y comparaciones: if, test, [ ], [[ ]], case
1. Objetivo del día
Aprender a que tus scripts tomen decisiones, usando condicionales y comparaciones:
- comprobar valores
- comparar números
- comparar cadenas
- verificar si un archivo o directorio existe
- ejecutar diferentes caminos según la situación
- crear menús simples con
case
Es uno de los pilares de Bash scripting real.
2. Requisitos
- Saber crear y ejecutar scripts (Día 1)
- Saber usar variables y
read
3. Sintaxis básica de if
La estructura base es:
if [ condición ]; then
comandos
elif [ otra_condición ]; then
comandos
else
comandos
fi
Notas importantes:
[ condición ]SIEMPRE lleva espacios alrededor
❌[5 -gt 3]
✔️[ 5 -gt 3 ]thenpuede ir en la siguiente línea o después de;
4. Comparaciones numéricas
En Bash NO usamos < y > directamente.
Se usan operadores especiales:
| Comparación | Operador |
|---|---|
| igual | -eq |
| distinto | -ne |
| mayor que | -gt |
| menor que | -lt |
| >= | -ge |
| <= | -le |
Ejemplo:
edad=20
if [ $edad -ge 18 ]; then
echo "Eres mayor de edad"
else
echo "Eres menor"
fi
5. Comparaciones de cadenas
Para comparar strings se usa:
= igual
!= distinto
-z cadena vacía
-n cadena NO vacía
Ejemplo:
if [ "$nombre" = "tomas" ]; then
echo "Hola Tomas"
fi
Siempre pon las variables entre comillas:
✔️ "$variable"
❌ $variable
6. Comprobar archivos y directorios
Muy usado en scripts reales:
| Test | Significado |
|---|---|
-f archivo | el archivo existe y es regular |
-d dir | el directorio existe |
-e ruta | existe (archivo o directorio) |
-r archivo | tiene permiso de lectura |
-w archivo | escritura |
-x archivo | ejecutable |
Ejemplo:
if [ -f config.txt ]; then
echo "Archivo de configuración encontrado"
else
echo "No existe"
fi
7. Sintaxis moderna con [[ ]] (recomendada)
[[ ]] es una versión mejorada:
- soporta operadores modernos
- no necesita tantas comillas
- menos errores de interpretación
Ejemplo:
if [[ "$nombre" == "admin" ]]; then
echo "Usuario administrador"
fi
8. case: perfecto para menús o varias opciones
Sintaxis:
case $opcion in
1) echo "Has elegido 1" ;;
2) echo "Has elegido 2" ;;
*) echo "Opción no válida" ;;
esac
Ejemplo real:
read -p "Elige opción (start/stop/status): " opcion
case $opcion in
start) echo "Iniciando servicio" ;;
stop) echo "Deteniendo servicio" ;;
status) echo "Estado del servicio" ;;
*) echo "Opción desconocida" ;;
esac
9. Práctica guiada (20–30 minutos)
9.1. Crear un script de comparaciones básicas
nano edad.sh
#!/bin/bash
read -p "Introduce tu edad: " edad
if [ $edad -lt 18 ]; then
echo "Eres menor"
elif [ $edad -lt 65 ]; then
echo "Eres adulto"
else
echo "Eres senior"
fi
Ejecutar:
chmod +x edad.sh
./edad.sh
9.2. Comprobar si un archivo existe
nano comprueba.sh
#!/bin/bash
read -p "Archivo a comprobar: " archivo
if [ -f "$archivo" ]; then
echo "Existe y es un archivo"
elif [ -d "$archivo" ]; then
echo "Existe y es un directorio"
else
echo "No existe"
fi
9.3. Crear un menú con case
nano menu.sh
#!/bin/bash
echo "1) Mostrar fecha"
echo "2) Mostrar usuarios"
echo "3) Salir"
read -p "Elige una opción: " op
case $op in
1) date ;;
2) who ;;
3) echo "Saliendo..."; exit 0 ;;
*) echo "Opción no válida" ;;
esac
10. Checklist del Día 2
- Sabes usar
if,elif,else - Comparas números con
-lt,-ge, etc. - Comparas cadenas con
=y!= - Compruebas archivos con
-f,-d,-e - Sabes cuándo usar
[[ ]] - Usas
casepara menús simples
Si está todo marcado → Día 2 superado.
11. Ejercicio sugerido
Crea un script llamado:
login.sh
Que:
- Pida un nombre de usuario
- Si es “admin”, muestre “Bienvenido administrador”
- Si es vacío → “No has introducido nombre”
- Para cualquier otro → “Acceso limitado”
Te prepara para los bucles del Día 3.
12. Día 2 completado
Ya tienes scripts que piensan y toman decisiones.
Mañana entramos en el corazón de la automatización:
👉 Día 3 – Bucles: for, while, until (y cómo procesar listas y ficheros línea a línea)
Este día será increíble.
