Shell Scripting · 8 min read · Nov 13, 2025
Shell Scripting Parte 3: Estructuras de Control de Decisión en Scripts de Shell
¡Hola! Ya cubrimos los conceptos básicos de la programación en shell, como aceptar entradas, procesar datos a través de operaciones aritméticas y generar y mostrar salidas en las partes anteriores de este tutorial (parte 1 y parte 2). En esta parte, profundizaremos en un tema más avanzado en un lenguaje de programación: tomar decisiones en un programa, pero esta vez lo haremos utilizando bash shell. ¡Comencemos!
Introducción
La mayoría de nuestros lenguajes de programación hoy en día son capaces de tomar decisiones basadas en condiciones que establecemos. Una condición es una expresión que evalúa un valor booleano: verdadero o falso. Cualquier programador puede hacer que su programa sea inteligente en función de la decisión y la lógica que ponga en su programa. El shell bash admite declaraciones de decisión if y switch (case).
Declaración If
If es una declaración que permite al programador tomar una decisión en el programa en función de las condiciones que especificó. Si se cumple la condición, el programa ejecutará ciertas líneas de código; de lo contrario, el programa ejecutará otras tareas que el programador especificó. La siguiente es la sintaxis admitida de la declaración if en el shell bash.
Sintaxis General
Decisión única:
if
then
### serie de código va aquí
fi Decisión doble:
if
then
### serie de código si se satisface la condición
else
### serie de código si la condición no se satisface
fi Múltiples condiciones if:
if
then
### serie de código para condición1
elif
then
### serie de código para condición2
else
### serie de código si la condición no se satisface
fi Sintaxis de corchete único
if [ condición ]
then
### serie de código va aquí
fiSintaxis de doble corchete
if ((condición))
then
### serie de código va aquí
fiLa sintaxis de corchete único es la sintaxis más antigua admitida en el shell bash. Se utiliza junto con todas las declaraciones condicionales en Linux. Mientras tanto, la sintaxis de doble paréntesis se utiliza para una declaración condicional basada en números para proporcionar una sintaxis familiar a los programadores. Todos los tipos de declaraciones if necesitan una condición especificada para ejecutar una tarea.
Declaraciones Condicionales en Linux
Las declaraciones condicionales se utilizan junto con una declaración de control de decisión. Hay diferentes tipos de declaraciones condicionales que puedes usar en el shell bash, las más comunes son: condiciones basadas en archivos, basadas en cadenas y basadas en aritmética.
Condición basada en archivos
Las condiciones basadas en archivos son expresiones unarias y se utilizan a menudo para examinar el estado de un archivo. La siguiente lista muestra las condiciones basadas en archivos más comúnmente utilizadas en el shell bash.
| Operador | Descripción |
| -a archivo | Devuelve verdadero si el archivo existe |
| -b archivo | Devuelve verdadero si el archivo existe y es un archivo especial de bloque |
| -c archivo | Devuelve verdadero si el archivo existe y es un archivo especial de carácter |
| -d archivo | Devuelve verdadero si el archivo existe y es un directorio |
| -e archivo | Devuelve verdadero si el archivo existe |
| -r archivo | Devuelve verdadero si el archivo existe y es legible |
| -s archivo | Devuelve verdadero si el archivo existe y tiene un tamaño mayor que cero |
| -s archivo | Devuelve verdadero si el archivo existe y tiene un tamaño mayor que cero |
| -w archivo | Devuelve verdadero si el archivo existe y es escribible |
| -x archivo | Devuelve verdadero si el archivo existe y es ejecutable |
| -N archivo | Devuelve verdadero si el archivo existe y ha sido modificado desde la última lectura |
Tomando una decisión basada en archivos
Veamos un ejemplo que ilustrará cómo construir una decisión basada en archivos en un script bash. En este ejemplo, crearemos un script que determina si el archivo existe en el directorio de inicio.
#!/bin/bash
cd
ls
if [ -e sample.sh ]
then
echo "¡el archivo existe!"
else
echo "el archivo no existe"
fi
En este ejemplo, nos aseguramos de que el shell regrese al directorio de inicio independientemente de nuestro directorio activo actual utilizando el comando cd. Además, el comando ls se utiliza para mostrar la lista de archivos en el directorio para que podamos verificar si el archivo realmente existe o no. Como puedes ver, el script muestra el texto “¡el archivo existe!” porque el sample.sh está en el directorio de inicio.
Nota: El compilador de shell es muy estricto en términos de sintaxis, especialmente con los espacios. Debe haber un espacio entre if y el corchete de apertura y entre los corchetes y la condición.Ahora, mejoremos nuestro script haciendo que nuestro código sea más dinámico permitiendo al usuario ingresar un nombre de script y determinar los permisos del archivo dado.
#!/bin/bash
cd
ls -l
read -p "Ingresa un nombre de archivo: " filename
if [ -e $filename ]
then
echo "¡el archivo existe!"
if [ -r $filename ]
then
status="legible "
fi
if [ -w $filename ]
then
status=$status"escribible "
fi
if [ -x $filename ]
then
status=$status"ejecutable"
fi
echo "permisos del archivo: "$status
else
echo "el archivo no existe"
fi
Condición basada en cadenas
Tomar decisiones basadas en una entrada de cadena del usuario también es posible en el shell bash. La condición basada en cadenas devuelve una expresión binaria como resultado, lo que significa que devuelve verdadero si se satisface la condición especificada; de lo contrario, devuelve falso. Los siguientes son los operadores condicionales basados en cadenas más comúnmente utilizados:
| Operador | Descripción |
| == | Devuelve verdadero si las cadenas son iguales |
| != | Devuelve verdadero si las cadenas no son iguales |
| -n | Devuelve verdadero si la cadena a probar no es nula |
| -z | Devuelve verdadero si la cadena a probar es nula |
Creemos un script de ejemplo utilizando la declaración condicional basada en cadenas. El script permitirá al usuario ingresar dos cadenas y evaluar si una de las cadenas es nula, si ambas cadenas son iguales o no.
#!/bin/bash
read -p "Primera Cadena: " str1
read -p "Segunda Cadena: " str2
if [ -z "$str1" ]
then
echo "La 1ª cadena es nula"
elif [ -z "$str2" ]
then
echo "La 2ª cadena es nula"
else
if [ $str1 == $str2 ]
then
echo "Las cadenas son iguales"
else
echo "Las cadenas no son iguales"
fi
fi
Condición basada en aritmética
El shell proporciona varias formas de declarar una condición basada en aritmética. La primera es utilizando mnemotécnicos que se pueden usar junto con la sintaxis de corchete único de estilo antiguo y la otra es utilizando símbolos amigables con las matemáticas que se pueden usar junto con el doble paréntesis.
A continuación se muestra la lista de mnemotécnicos disponibles para declaraciones condicionales basadas en aritmética en el shell:
| Operador | Uso/Descripción |
| -eq | Igual |
| -ge | Mayor o Igual |
| -gt | Mayor |
| -le | Menor o Igual |
| -lt | Menor |
| -ne | No Igual |
Creemos un script que acepte un entero del usuario y determine si el entero es cero, negativo, impar o un número par.
#!/bin/bash
read -p "Ingresa un entero: " int1
if [ $int1 -eq 0 ]
then
echo "Cero"
elif [ $int1 -lt 0 ]
then
echo "Negativo"
else
if [ $((int1%2)) -eq 0 ]
then
echo "Par"
else
echo "Impar"
fi
fi
Operador aritmético para la sintaxis de doble paréntesis:
| Operador | Uso/Descripción |
| == | Igual |
| >= | Mayor o Igual |
| > | Mayor |
| <= | Menor o Igual |
| < | Menor |
| != | No Igual |
Ahora, reconstruyamos nuestro script anterior y usemos la sintaxis de doble paréntesis:
#!/bin/bash
read -p "Ingresa un entero: " int1
if (( $int1 == 0 ))
then
echo "Cero"
elif (( $int1 < 0 ))
then
echo "Negativo"
else
if (( $((int1%2)) == 0 ))
then
echo "Par"
else
echo "Impar"
fi
fi
Declaración Switch
La declaración switch es otro tipo de declaración condicional en la programación de shell. Permite a un programador comparar varios valores contra una variable de una manera más fácil en comparación con la declaración condicional if. La sintaxis para la declaración switch es:
case in
)
##serie de código para patrón1
;;
)
##serie de código para patrón2
;;
)
##serie de código para patrónN
;;
*)
##declaraciones predeterminadas
esac
El patrón es el valor posible de la variable. Cada patrón está separado por un doble punto y coma que sirve como una declaración de ruptura del patrón. La declaración switch se cierra con una declaración esac.
#!/bin/bash
clear
read -p "Entero1: " int1
read -p "Entero2: " int2
echo "======================"
printf "Menú: \n[a] Suma\n[b]Resta\n[c]Multiplicación\n[d]División\n"
echo "======================"
read -p "Tu elección: " choice
res=0
case $choice in
a)
res=$((int1+int2))
;;
b)
res=$((int1-int2))
;;
c)
res=$((int1*int2))
;;
d)
res=$((int1/int2))
;;
*)
echo "Entrada no válida"
esac
echo "El resultado es: " $res
Conclusión
El shell bash proporciona muchas herramientas útiles para los programadores. Al igual que la mayoría de los lenguajes de programación hoy en día, también es capaz de tomar decisiones condicionales que hacen que los scripts de shell sean más interactivos e inteligentes. Presentaremos estructuras de control repetitivas en la próxima serie. Hasta la próxima.
Referencias
- http://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html
- https://linuxacademy.com/blog/linux/conditions-in-bash-scripting-if-statements/
La próxima lección: Estructuras de Control de Repetición
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.