Estructuras de control en Bash

estructuras de control en bash

Anteriormente vimos los operadores, que junto con las estructuras de control en Bash permiten modificar el funcionamiento de la aplicación basándse en condiciones y ciclos. Estas estructuras son fundamentales para tomar gestionar el comportamiento de los programas.

Las estructuras de control en Bash más utilizadas son:

  1. if
  2. else
  3. elif
  4. for
  5. while
  6. break
  7. continue
  8. exit

Control de flujo en Bash

Seguramente ya estamos familiarizados con la sentencia if-elseif-else. Esta nos sirve para controlar las decisiones del código según vayan cambiando los valores de nuestras variables en un punto determinado del código. Así podemos ejecutar las instrucciones que nuestro programa requiera.

if-elif

La condición if se utiliza para ejecutar comandos basados en condiciones dadas por los valores de nuestra variables. Pero también podemos hacer la combinación con elif, que básicamente es como se llama aquí a else-if y que nos permite evaluar una condición adicional a la primera.

La sintaxis básica es:

if [ condicion_1 ]; then
    ...
elif [ condicion_2 ]; then
    ...
fi

En un ejemplo:

#!/bin/bash

edad=18

if [ $edad -lt 18 ]; then
    echo "Eres menor de edad."
elif [ $edad -gt 18 ]; then
    echo "Tienes más de 18 años."
fi

Con esta condición estamos preguntando si la edad es menor que (less than) 18 y si esto es correcto nos mostrará el mensaje “Eres menor de edad.”, de lo contrario evaluará la siguiente condición que valida si la edad es mayor que (greater than) 18 entonces escribirá el mensaje “Tienes más de 18 años.”. Si ninguna condición se cumple (cuando la edad sea exactamente igual 18) no imprimirá ningún mensaje en la pantalla.

if-elif-else

Aunque podemos resolver el problema usando otro tipo de comparación, como por ejemplo, usando el mayor o igual que (greater than or equal, -ge), puede ser que querramos saber si el usuario tiene exactamente 18 años. Para ello usamos la variante de if-elif-else. En donde el else se convierte en nuestro comodín cuando todo lo demás falla.

La sintaxis básica es:

if [ condicion_1 ]; then
    ...
elif [ condicion_2 ]; then
    ...
elif [ condicion_3 ]; then
    ...
else
    ...
fi

Veamos el ejemplo:

#!/bin/bash

edad=18

if [ $edad -lt 18 ]; then
    echo "Eres menor de edad."
elif [ $edad -eq 18 ]; then
    echo "Tienes 18 años."
else
    echo "Eres mayor de edad."
fi

Aquí tenemos las tres opciones posibles: que sea menor, que sea igual o que sea mayor.

Ciclos en Bash

Un ciclo (también se llama bucle) es una estructura que permite repetir un bloque de código varias veces hasta que se cumpla una condición específica o hasta que explícitamente le digamos que debe salir. Los ciclos son útiles para automatizar tareas repetitivas, como recorrer los elementos de una array. Veremos los dos comunes: for y while.

for

El ciclo for se utiliza para ejecutar un bloque de código un número determinado de veces, o para iterar sobre una lista de elementos de la que ya sabemos su longitud (también sin conocerla, pero es el escenario común).

Su sintaxis es:

for variable in lista; do
    # Código a ejecutar en cada iteración
done

Ejemplo:

#!/bin/bash

for numero in 1 2 3 4 50; do
    echo "Número: $numero"
done

Con esto nos imprimirá 5 líneas con el valor de cada elemento.

También puedes utilizar un rango de números con el operador {}:

#!/bin/bash

for numero in {1..5}; do
    echo "Número: $numero"
done

Recorrer un array en Bash con for

Uno de los usos más comunes de for que veremos es recorrer un array. Para hacerlo hay varias formas. El primero nos arroja el index de cada elemento mediante la instrucción especial ${!langs[@]}:

#!/bin/bash

langs=("go" "c#" "java" "bash")

for index in "${!langs[@]}"; do
    echo "Index: $index"
done

Lo anterior nos regresaría la posición, no el valor.

Ahora la expresión ${langs[@]} nos regresa el valor en la posición que en la que estamos iterando.

#!/bin/bash

langs=("go" "c#" "java" "bash")

for lang in "${langs[@]}"; do
    echo "Lenguaje: $lang"
done

Ahora, para utilizar tanto el index como el valor, lo hacemos así:

#!/bin/bash

for index in "${!langs[@]}"; do
    echo "Index $index => ${langs[$index]}"
done

Aquí recorremos el array tomando los indexes y luego directamente leemos el array enviándole la posición en la que for esté.

while

El ciclo while ejecuta un bloque de código mientras una condición sea verdadera. Este es un buena estructura para recorrer algo cuando no conocemos su longitud.

Sintaxis:

while [ condición ]; do
    ...
done

Ejemplo:

#!/bin/bash

contador=1

while [ $contador -le 5 ]; do
    echo "Contador: $contador"
    ((contador++))
done

Otras instrucciones de control

break

El comando break se usa para salir de un ciclo antes de que se complete, por lo general se define mediante una condición que se evalua, ya sea por la variable de control general o alguna otra.

Ejemplo con break:

#!/bin/bash

for numero in {1..10}; do
    if [ $numero -eq 5 ]; then
        break
    fi
    echo "Número: $numero"
done

En este caso, el ciclo for se interrumpe cuando numero es igual a 5.

continue

El comando continue permite saltarse un paso en la ejecución de la instrucción dentro del ciclo y volver a ejecutar el ciclo. Esto puede ser en cualquier lugar dentro del ciclo.

Ejemplo con continue:

#!/bin/bash

for numero in {1..5}; do
    if [ $numero -eq 3 ]; then
        continue
    fi
    echo "Número: $numero"
done

Aquí, cuando numero es 3 (-eq, equals), la instrucción continue hace que se salte esa iteración, por lo que no se imprime la línea “Número: 3” pero sí las demás.

exit

El comando exit finaliza el script inmediatamente y te permite devolver un código de salida opcional.

Ejemplo con exit:

#!/bin/bash

echo "Comenzando el script..."

# Finalizar el script
exit 0

# Este código nunca se ejecutará
echo "Esto no se mostrará."

En este ejemplo, el script finaliza con el código de salida 0, que significa “ejecución exitosa”. Las líneas después de exit no se ejecutan.

Esto ha sido el post sobre las estructuras de control de Bash. Después veremos otros ejemplos donde iremos juntando todo el conocimiento hasta ahora.

¡Gracias por leer!


Posted

in

, ,

by