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 ]
  • then puede 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ónOperador
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:

TestSignificado
-f archivoel archivo existe y es regular
-d direl directorio existe
-e rutaexiste (archivo o directorio)
-r archivotiene permiso de lectura
-w archivoescritura
-x archivoejecutable

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 case para menús simples

Si está todo marcado → Día 2 superado.


11. Ejercicio sugerido

Crea un script llamado:

login.sh

Que:

  1. Pida un nombre de usuario
  2. Si es “admin”, muestre “Bienvenido administrador”
  3. Si es vacío → “No has introducido nombre”
  4. Para cualquier otro → “Acceso limitado”

Te prepara para los bucles del Día 3.

Intenta hacerlo por tu cuenta a ver que tal para intentar asimilar mejor lo estudiado hoy. Aquí tienes la solución de todos modos.

#!/bin/bash

read -p "nombre de usuario: " user

case "$user" in
    admin)
        echo "Bienvenido Admin super!!"
        ;;
    "")
        echo "No has introducido nombre"
        ;;
    *)
        echo "Acceso limitado"
        ;;
esac

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.