05. Bash: control de flujo (condicionales)

Publicado por

En la nota anterior utilicé un ejemplo que incorporaba una estructura como la siguiente:

if [ condición ]; then
...
else #En otro caso, si no
...
fi

Esta estructura permite controlar qué serie de instrucciones se ejecutarán, de acuerdo a si se cumplen las condiciones o no.

condicional

Ejemplo:

#!/bin/bash
#Condicionales: if-then-else

echo "Adivina mi edad:"
read edad

if [ $edad -eq 30 ]; then
  echo "¡Correcto!"
  exit 0
else
  echo "¡Incorrecto!"
  exit 1
fi

if-else-bash

Además, como en otros lenguajes de programación, en Bash también se puede anidar tantos if-then-else como sean necesarios.

Ejemplo:

#!/bin/bash
#Condicionales: if-then-else

echo "Adivina mi edad:"
read edad

if [ $edad -eq 30 ]; then
  echo "¡Correcto!"
else
  if [ $edad -ge 28 ] && [ $edad -le 33 ]; then
    echo "¡Caliente caliente! Casi le atinas"
  else
    if [ $edad -ge 25 ] && [ $edad -le 35 ]; then
      echo "¡Tibio tibio! Te quedaste cerca"
    else
      echo "¡Frío frío! Te quedaste muy lejos"
    fi
  fi
fi

if-else-anidados-bash

Nótese que cuando se necesita realizar más de una comparación, cada una va encerrada por corchetes independientes:

if [ condición ] operador lógico [ condición ]; then

Otra forma de hacerlo es utilizando la instrucción elifque sirve para indicar “si la condición no se cumplió, verifica esta otra”. Esta es una forma más limpia y clara, por lo que considero que es la mejor opción.

#!/bin/bash
#Condicionales: if-then-else

echo "Adivina mi edad:"
read edad

if [ $edad -eq 30 ]; then
  echo "¡Correcto!"
elif [ $edad -ge 28 ] && [ $edad -le 33 ]; then
  echo "¡Caliente caliente! Casi le atinas"
elif [ $edad -ge 25 ] && [ $edad -le 35 ]; then
  echo "¡Tibio tibio! Te quedaste cerca"
else
  echo "¡Frío frío! Te quedaste muy lejos"
fi

if-elif-bash

Como se puede ver en las salidas de cada script, las dos formas son correctas, ya que cumplen con el mismo objetivo.

Algunas reglas y convenciones para tomar en cuenta

Corchetes

Los corchetes deben ir separados por un espacio de la condición:

Correcto: [ condición ]

Incorrecto: [condición], [condición ], [ condición]

Operadores de comparación

Cadena
Numérico
Verdadero si

x = y

x -eq y

x es igual a y

x != y

x -ne y

x no es igual a y

x < y

x -lt y

x menor que y

x -le y

x es menor o igual que y

x > y

x -gt y

x es mayor que y

x -ge y

x es mayor o igual que y

-n x

x no es nulo

-z x

x es nulo

Operadores de evaluación de archivos

Operador
Verdadero si

-d archivo

archivo existe y es un directorio

-e archivo

archivo existe

-f archivo

archivo existe y es un archivo regular

-r archivo

tiene permiso de lectura en el archivo

-s archivo

archivo existe y no está vacío

-w archivo

tiene permiso de escritura en el archivo

archivo1 -nt archivo2

archivo1 es más reciente que el archivo2

archivo1 -ot archivo2

archivo1 es mayor que archivo2

Operadores lógicos

Operador
Verdadero si

==

las expresiones son verdaderas

&&

ambas expresiones son verdad, de lo contrario falso

||

al menos una de las expresiones es verdadera

Espero esta información te haya sido de utilidad, en la próxima nota continuaré con el tema Bash: control de flujo (case). Hasta pronto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *