Declaraciones Condicionales en Scripts de Shell

Para que los scripts de Shell posean cierta capacidad de decisión, el primer desafío consiste en diferenciar entre distintas circunstancias para determinar qué operación ejecutar. Por ejemplo, cuando el uso del disco supera el 95%, se podría enviar una alerta; si un directorio de respaldo no existe, crearlo automáticamente; o durante la compilación de código fuente, detener la instalación si la configuración falla.

Uso del comando test para evaluaciones

El comando test se emplea mediante dos sintaxis equivalentes:

test expresión_condicional

o bien

[ expresión_condicional ]

Pruebas basadas en archivos

Estas pruebas determinan si una ruta corrseponde a un archivo o directorio, o verifican permisos de acceso. Las opciones comunes son:

  • -d: verifica si es un directorio.
  • -e: comprueba la existencia de un archivo o directorio.
  • -f: indica si es un archivo regular.
  • -r: evalúa permisos de lectura para el usuario actual.
  • -w: evalúa permisos de escritura.
  • -x: verifica permisos de ejecución.

Comparación numérica

Operador Descripción Ejemplo (evaluar si 10 es mayor que 5)
-eq Igual a [ 10 -eq 5 ]
-ne Distinto de [ 10 -ne 5 ]
-gt Mayor que [ 10 -gt 5 ]
-lt Menor que [ 10 -lt 5 ]
-ge Mayor o igual que [ 10 -ge 5 ]
-le Menor o igual que [ 10 -le 5 ]

Comparación de cadenas

Operador Descripción Ejemplo
= Cadenas iguales [ "$cadena1" = "$cadena2" ]
!= Cadenas diferentes [ "$cadena1" != "$cadena2" ]
-z Longitud de cadena cero (vacía) [ -z "$cadena" ]
-n Longitud de cadena no cero [ -n "$cadena" ]

Operadores lógicos

Sintaxis Descripción Ejemplo
&& (en [[ ]]) Y lógico [[ $valor -gt 5 && $valor -lt 10 ]]
|| (en [[ ]]) O lógico [[ $valor -lt 0 || $valor -gt 10 ]]
-a (en [ ]) Y lógico [ $valor -gt 5 -a $valor -lt 10 ]
-o (en [ ]) O lógico [ $valor -lt 0 -o $valor -gt 10 ]
! Negación lógica [ ! -f documento.txt ]

Estructura if de una sola rama

Esta sintaxis ejecuta un bloque de código únicamente cuando la condición se cumple; de lo contrario, lo omite.


if [ expresión_condicional ]; then
    # Código a ejecutar si la condición es verdadera
fi

Ejemplo: Verifciar si un directorio no existe y crearlo en caso necesario.


#!/bin/bash
directorio="/var/tmp/nueva_carpeta"
if [ ! -d $directorio ]; then
    mkdir -p $directorio
    echo "Directorio $directorio creado exitosamente."
fi

Estructura if de doble rama

Permite ejecutar dos bloques de código distintos según se cumpla o no la condición.


if [ expresión_condicional ]; then
    # Código para condición verdadera
else
    # Código para condición falsa
fi

Ejemplo: Determinar si un número ingresado es par o impar.


#!/bin/bash
read -p "Ingrese un número entero: " numero
if [ $((numero % 2)) -eq 0 ]; then
    echo "El número $numero es par."
else
    echo "El número $numero es impar."
fi

Estructura if de múltiples ramas

Evalúa varias condiciones en secuencia y ejecuta el bloque correspondienet a la primera condición verdadera.


if [ condición1 ]; then
    # Código si condición1 es verdadera
elif [ condición2 ]; then
    # Código si condición2 es verdadera
else
    # Código si ninguna condición se cumple
fi

Ejemplo: Clasificar una temperatura según rangos.


#!/bin/bash
read -p "Ingrese la temperatura en °C: " temp
if ! [[ $temp =~ ^-?[0-9]+$ ]]; then
    echo "Error: Ingrese un valor numérico."
    exit 1
fi

if [ $temp -gt 30 ]; then
    echo "Clima: Caluroso."
elif [ $temp -ge 15 ]; then
    echo "Clima: Templado."
elif [ $temp -ge 0 ]; then
    echo "Clima: Frío."
else
    echo "Clima: Bajo cero."
fi

Las declaraciones condicionales en Shell se basan en expresiones evaluadas mediante comandos como test o corchetes. La elección entre if y case depende de la complejidad de las condiciones: if resulta versátil para múltiples tipos de evaluaciones, mientras que case simplifica la comparación contra valores fijos.

Etiquetas: shell-scripting bash conditional-statements test-command if-else

Publicado el 6-6 23:40