34  Condicionales

Fecha: 13 de octubre, 2026

Objetivos:

  • Comprender la lógica de condicionales → Identificar cuándo y cómo aplicar if, else y elif para tomar decisiones en un script.

  • Aplicar condicionales en scripts → Resolver problemas prácticos mediante condiciones (ej. verificar existencia de archivos, validar entradas).

Las condicionales son estructuras de programación que nos permiten tomar decisiones basadas en el resultado de una expresión. En otras palabras, nos permiten ejecutar diferentes bloques de código dependiendo de si una condición se cumple o no. Los condicionales son fundamentales para automatizar tareas y crear scripts fléxibles.

Estructura básica:

if [ condición ]; then
    # Instrucciones si se cumple
fi

La sintáxis básica de un condicional simple en formato de una línea es:

if [ condición ]; then orden1; orden2; fi

de igual manera pero en bloque identado:

if [ condición ]; then      orden1     orden2  fi
if [ condición ]; then
    orden1
    orden2
fi
NotaEjemplo

Si queremos verificar si existe el archivo alumnos.txt antes de realizar alguna operación sobre él. Puedes usar el siguiente condicional:

if [ -f matematicos/ejercicios/alumnos.txt ]; then
  echo "El archivo existe."
else
  echo "El archivo no existe."
fi

Explicación

Dentro de matematicos/ejercicios revisaremos si existen los archivos de .txt que generamos antes.

  • if [ -f alumnos.txt ]: Verifica si alumnos.txt es un archivo regular.
  • then: Si la condición es verdadera, se ejecuta el código siguiente.
  • else: Si la condición es falsa, se ejecuta el código siguiente.
  • fi: Indica el final de la estructura if.

34.0.1 Ejemplo 1. Verificar si una persona es mayor de edad

  1. Corchetes sencillos [ ]
edad=20

if [ "$edad" -ge 18 ]; then
    echo "Eres mayor de edad"
fi

El operador -ge significa mayor o igual que.

2. Corchetes dobles [[ ]]

if [[ $edad -ge 18 ]]; then
    echo "Mayor de edad"
fi

3. Paréntesis dobles (( ))

if (( $edad >= 18 )); then
    echo "Mayor de edad"
fi
Importante¿Por qué no utilizar >= dentro de [ ] o [[ ]]?

Porque esos operadores no funcionan como comparadores numéricos en esas estructuras.

34.1 Tabla de operadores para condicionales en Bash

Operación [ ] y [[ ]] (( ))
Igual a -eq ==
Diferente de -ne !=
Mayor que -gt >
Menor que -lt <
Mayor o igual -ge >=
Menor o igual -le <=

34.1.1 Ejemplo 2. Verificar si un número es positivo

  1. Corchetes sencillos [ ]
numero=10

if [ "$numero" -gt 0 ]; then
    echo "El número es positivo"
fi
TipEjercicio grupal

Convierte el ejemplo 2 cambiando a:

2. Corchetes dobles [[ ]]

3. Paréntesis dobles (( ))

34.2 Nivel básico: if y else

¿Qué sucede si la condición no se cumple?

Podemos utilizar else para indicar qué instrucciones ejecutar en caso contrario.

if [ condición ]; then
    # Si es verdadera
else
    # Si es falsa
fi

34.2.1 Ejemplo 3. Determinar sí un estudiante aprobó

calificacion=7

if [ "$calificacion" -ge 6 ]; then
    echo "Aprobado"
else
    echo "Reprobado"
fi
TipEjercicio grupal

Convierte el ejemplo 2 cambiando a:

2. Corchetes dobles [[ ]]

3. Paréntesis dobles (( ))

34.2.2 Ejemplo 4. Determinar si un número es par o impar

numero=8

if [ $((numero % 2)) -eq 0 ]; then
    echo "El número es par"
else
    echo "El número es impar"
fi

Aquí utilizamos dos conceptos:

  • $(( ... )) permite realizar operaciones aritméticas.

  • % obtiene el residuo de una división.

Si el residuo al dividir entre 2 es cero, el número es par.

TipEjercicio grupal

Convierte el ejemplo 2 cambiando a:

2. Corchetes dobles [[ ]]

3. Paréntesis dobles (( ))

34.3 Nivel básico-intermedio: elif

Cuando necesitamos evaluar varias condiciones, utilizamos elif, que significa else if.

34.3.1 Ejemplo 5. Clasificar calificaciones

calificacion=8

if [ "$calificacion" -ge 9 ]; then
    echo "Excelente"
elif [ "$calificacion" -ge 7 ]; then
    echo "Bueno"
elif [ "$calificacion" -ge 6 ]; then
    echo "Suficiente"
else
    echo "Reprobado"
fi

Bash evalúa las condiciones de arriba hacia abajo y ejecuta únicamente el primer bloque cuya condición sea verdadera.

TipEjercicio grupal

Convierte el ejemplo 2 cambiando a:

2. Corchetes dobles [[ ]]

3. Paréntesis dobles (( ))

34.4 Nivel intermedio: condiciones con read

Hasta ahora hemos utilizado valores definidos dentro del script. Pero podemos pedir información directamente al usuario.

34.4.1 Ejemplo 6. Solicitar la edad

echo "¿Cuántos años tienes?"
read -r edad

if [ "$edad" -ge 18 ]; then
    echo "Puedes ingresar"
else
    echo "No puedes ingresar"
fi

read -r permite almacenar lo que escribe el usuario en una variable. En este ejemplo se supone que introduce un número entero válido.

34.4.2 Ejemplo 7. Comparar dos números

  1. Crea un script llamado comparar_dos_numeros.shdentro de la carpeta matematicos
  2. Copia el siguiente código
#!/bin/bash

echo "Ingresa el primer número:"
read -r a

echo "Ingresa el segundo número:"
read -r b

if [ "$a" -gt "$b" ]; then
    echo "$a es mayor que $b"
elif [ "$a" -lt "$b" ]; then
    echo "$b es mayor que $a"
else
    echo "Los números son iguales"
fi
  1. Ejecuta el script.

34.5 Nivel intermedio: condiciones con texto

También podemos comparar cadenas de caracteres.

Operador Significado
= Las cadenas son iguales
!= Las cadenas son diferentes
-z La cadena está vacía
-n La cadena no está vacía

34.5.1 Ejemplo 8. Verificar una contraseña de ejemplo

  1. Crea un script llamado contrasena.shdentro de la carpeta matematicos
  2. Copia el siguiente código
#!/bin/bash

clave="bash123"

echo "Ingresa la contraseña:"
read -r respuesta

if [ "$respuesta" = "$clave" ]; then
    echo "Acceso permitido"
else
    echo "Acceso denegado"
fi
  1. Ejecuta el script.

Este ejemplo es únicamente educativo; no es un sistema seguro de autenticación.

34.6 Nivel intermedio: operadores lógicos

Podemos combinar dos o más condiciones.

Operador Significado
&& AND: ambas condiciones deben cumplirse
\|\| OR: al menos una condición debe cumplirse
! NOT: niega una condición

34.6.1 Ejemplo 9. Verificar si una calificación está dentro del rango válido

Ejecutar en la terminal:

calificacion=8

if [ "$calificacion" -ge 0 ] && [ "$calificacion" -le 10 ]; then
    echo "Calificación válida"
else
    echo "Calificación inválida"
fi

34.6.2 Ejemplo 10. Verificar si un número está fuera de un rango

numero=120

if [ "$numero" -lt 1 ] || [ "$numero" -gt 100 ]; then
    echo "Fuera del rango"
else
    echo "Dentro del rango"
fi

Evaluemos las condiciones

Condición Evaluación Resultado
[ "$numero" -lt 1 ] ¿120 es menor que 1? Falso
[ "$numero" -gt 100 ] ¿120 es mayor que 100? Verdadero

34.7 Nivel intermedio: comprobar archivos

Los condicionales son especialmente útiles para automatizar tareas con archivos y directorios.

Operador Comprueba si…
-f Existe un archivo regular
-d Existe un directorio
-e Existe una ruta
-r Se puede leer
-w Se puede escribir
-x Se puede ejecutar

34.7.1 Ejemplo 11. Verificar si existe un archivo

  1. Mueve a matematicos/ejercicios/

  2. Ejecuta lo siguiente:

archivo="datos.txt"

if [ -f "$archivo" ]; then
    echo "El archivo existe"
else
    echo "El archivo no existe"
fi

34.7.2 Ejemplo 12. Crear un directorio si no existe

directorio="resultados"

if [ ! -d "$directorio" ]; then
    mkdir "$directorio"
    echo "Directorio creado"
else
    echo "El directorio ya existe"
fi

34.8 Nivel intermedio: case

Cuando necesitamos evaluar múltiples valores posibles de una misma variable, case puede resultar más sencillo que utilizar muchos elif.

34.8.1 Ejemplo 13. Menú de opciones

#!/bin/bash

echo "===== MENÚ PRINCIPAL ====="
echo "1. Mostrar fecha"
echo "2. Mostrar directorio actual"
echo "3. Mostrar usuario"

read -r -p "Selecciona una opción: " opcion

case "$opcion" in
    1)
        date
        ;;
    2)
        pwd
        ;;
    3)
        whoami
        ;;
    *)
        echo "Opción no válida"
        ;;
esac

Este código evalúa el contenido de la variable opcion.

Valor de opcion Comando ejecutado ¿Qué hace?
1 date Muestra la fecha y hora actuales.
2 pwd Muestra el directorio actual.
3 whoami Muestra el usuario actual.
Cualquier otro echo "Opción no válida" Muestra un mensaje de error.

Por ejemplo, si opcion=2, Bash ejecutará únicamente pwd.

El símbolo * representa cualquier valor que no coincida con las opciones anteriores.

Nota

En Bash, read -r permite leer información ingresada por el usuario sin interpretar las barras invertidas (\) como caracteres especiales.

1. Diferencia entre read y read -r

Comando ¿Qué hace?
read variable Lee una entrada, pero interpreta las barras invertidas (\).
read -r variable Lee la entrada respetando las barras invertidas literalmente.

34.9 ¿Qué es la programación defensiva?

La programación defensiva es una práctica que consiste en escribir programas capaces de anticipar, detectar y manejar posibles errores antes de que provoquen resultados inesperados.

En otras palabras:

No debemos asumir que el usuario siempre utilizará correctamente nuestro programa.

34.9.1 Ejemplo 14. saludar.sh

Sin programación defensiva

Crea un script que se llame saludar_sin_pd.sh

#!/bin/bash

nombre=$1
echo "¡Hola, $nombre!"

Si ejecutamos:

./saludar_sin_pd.sh Ana

Obtenemos:

¡Hola, Ana!

Pero ¿qué sucede si olvidamos proporcionar el nombre?

./saludar_sin_pd.sh

Resultado:

¡Hola, !

El programa no presenta un error de ejecución, pero su resultado no es el esperado.

Aplicando programación defensiva

El programa saluda a una persona utilizando el nombre que recibe como argumento. Sin embargo, antes de hacerlo, verifica que el usuario haya proporcionado al menos un argumento.

Crea un script que se llame saludar.sh

#!/bin/bash

if [ $# -eq 0 ]; then # if (( $# == 0 )); then
    echo "Error: Debes proporcionar un nombre"
    echo "Uso: ./saludar.sh <nombre>"
    exit 1
fi

nombre=$1
echo "¡Hola, $nombre!"

Explicación línea por línea

Código Explicación
#!/bin/bash Indica que el script se ejecutará con Bash.
$# Número de argumentos proporcionados al script.
[ $# -eq 0 ] Comprueba si el número de argumentos es igual a cero.
then Inicia las instrucciones cuando la condición es verdadera.
echo Muestra mensajes en la terminal.
exit 1 Termina el script con un código de error.
fi Finaliza el condicional if.
nombre=$1 Guarda el primer argumento en la variable nombre.
echo "¡Hola, $nombre!" Muestra el saludo personalizado.

34.9.2 Principios de programación defensiva

Principio Aplicación en saludar.sh
Anticipar errores El usuario podría olvidar escribir su nombre.
Validar entradas $# comprueba cuántos argumentos se recibieron.
Mostrar mensajes claros echo explica el error y cómo ejecutar el script.
Detener ejecuciones incorrectas exit 1 evita continuar sin argumentos.
Continuar cuando todo es correcto El programa muestra el saludo.

34.9.3 Pregunta para reflexionar

Nuestro script ya comprueba si el usuario proporcionó un argumento, pero ¿qué sucede si ejecutamos lo siguiente?

./saludar.sh Ana Pedro Maria

El programa responde:

¡Hola, Ana!

¿Es correcto? Depende de lo que esperamos que haga nuestro programa.

Si el objetivo es recibir exactamente un nombre, necesitamos agregar otra validación:

#!/bin/bash

if (( $# == 0 )); then
    echo "Error: Debes proporcionar un nombre"
    exit 1
elif (( $# > 1 )); then
    echo "Error: Solo debes proporcionar un nombre"
    exit 1
else
    nombre=$1
    echo "¡Hola, $nombre!"
fi

Así, el programa no solo comprueba que haya argumentos, sino también que se reciba la cantidad esperada.

34.10 Referencias