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í  
 fi

Sintaxis de doble corchete

if ((condición))  
 then  
     ### serie de código va aquí  
 fi

La 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.

OperadorDescripción
-a archivoDevuelve verdadero si el archivo existe
-b archivoDevuelve verdadero si el archivo existe y es un archivo especial de bloque
-c archivoDevuelve verdadero si el archivo existe y es un archivo especial de carácter
-d archivoDevuelve verdadero si el archivo existe y es un directorio
-e archivoDevuelve verdadero si el archivo existe
-r archivoDevuelve verdadero si el archivo existe y es legible
-s archivoDevuelve verdadero si el archivo existe y tiene un tamaño mayor que cero
-s archivoDevuelve verdadero si el archivo existe y tiene un tamaño mayor que cero
-w archivoDevuelve verdadero si el archivo existe y es escribible
-x archivoDevuelve verdadero si el archivo existe y es ejecutable
-N archivoDevuelve 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

Tomando una decisión basada en archivos

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

Tomando una decisión dinámica basada en archivos

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:

OperadorDescripción
==Devuelve verdadero si las cadenas son iguales
!=Devuelve verdadero si las cadenas no son iguales
-nDevuelve verdadero si la cadena a probar no es nula
-zDevuelve 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

Declaración condicional basada en cadenas

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:

OperadorUso/Descripción
-eqIgual
-geMayor o Igual
-gtMayor
-leMenor o Igual
-ltMenor
-neNo 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

Declaración condicional basada en aritmética

Operador aritmético para la sintaxis de doble paréntesis:

OperadorUso/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

Operador basado en aritmética

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

Declaración switch en linux

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

La próxima lección: Estructuras de Control de Repetición

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.