Saltar a contenido

Bash Scripting Ciclos#

Los ciclos son una estructura fundamental de programacion, utilizada para la ejecucion de secuencias de instrucciones repetidamente hasta que una condicion en especifico sea cumplida.

Los ciclos se pueden utilizar para distintos propositos como repetir la ejecucion de funciones, recorrer el contenido de un arreglo, contadores, etc.

LOOPS

En bash podemos utilizar 3 distintos tipos de ciclos:

  • for
  • while
  • until

Ciclo for#

El ciclo for es el mas basico para iterar en elementos de una lista y ejecutar las instrucciones deseadas.

Sintaxis#

for elemento in [lista]
do
    instrucciones
done

En donde elemento es una variable que existe solamente en el ambito del ciclo, y lista es un conjunto de elementos iterables.

Ejemplos#

#!/usr/bin/env bash
# Ciclo para elmentos individuales
for i in 0 1 2 3 4 5
do
   echo "Elemento ${i}"
done
#!/usr/bin/env bash
# Ciclo para elmentos individuales con cadena de caracteres
for i in "uno" "dos" "tres"
do
   echo "Elemento ${i}"
done
#!/usr/bin/env bash
# Ciclo con rango
for i in {0..10}
do
   echo "Elemento ${i}"
done
#!/usr/bin/env bash
# Ciclo con rango e incremento
for i in {0..10..2}
do
   echo "Elemento ${i}"
done
#!/usr/bin/env bash
# Ciclo estilo C
for (( i=0; i<=10; i++ ))
do
   echo "Elemento ${i}"
done
#!/usr/bin/env bash
# Ciclo con arreglo
numeros=(1 2 3 4 5 6 7 8 9 10)
for i in ${numeros[@]}
do
   echo "Elemento ${i}"
done
#!/usr/bin/env bash
# Ciclo con arreglo e indices
numeros=(1 2 3 4 5 6 7 8 9 10)
for i in ${!numeros[@]}
do
    echo "Indice $i"
done
#!/usr/bin/env bash
# Ciclo con archivos
for f in *.sh
do
   echo "Script ${f}"
done

Ciclo while#

El ciclo while en bash ejecuta un conjunto de instrucciones o comandos un numero indeterminado de veces hasta que la condicion sea falsa.

Sintaxis#

while [condicion]
do
    [instrucciones]
done

Ejemplos#

#!/usr/bin/env bash
# Muestra el mensaje Bienvenido 5 veces
x=1
while [ ${x} -le 5 ]
do
  echo "Bienvenido ${x}"
  x=$(( ${x} + 1 ))
done
#!/usr/bin/env bash
# Lee el contenido de un archivo linea por linea
archivo="/etc/passwd"
while IFS= read -r line
do
  echo "${line}"
done < "${archivo}"
#!/usr/bin/env bash
# Ciclo while con multiples condiciones
num1=1
num2=5

while [[ ${num1} -lt ${num2} || ${num1} == ${num2} ]]
do
        echo "El numero es: "${num1}
        ((num1++))
done    
echo "Terminado !"

Ciclo until#

El ciclo until en bash ejecuta un conjunto de instrucciones o comandos un numero indeterminado de veces hasta que la condicion sea verdadera.

Sintaxis#

until [condicion]
do
    [instrucciones]
done

Ejemplos#

#!/usr/bin/env bash
# Ciclo until que imprime numeros desde 0 hasta que x sea mayor a 10
x=0

until [ ${x} -gt 10 ]
do
        echo "El numero es::" ${x}
        ((x++))
done

Control de ciclos#

Los ciclos estan diseñdos para repetirse hasta que alguna condicion se cumple, sin embargo existen instrucciones que permiten controlar el flujo del ciclo.

Instruccion break#

#!/usr/bin/env bash
# Escript que termina su ejecucion al llegar al mes indicado.
for mes in enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre
do
    if [ "${mes}" == "octubre" ]
    then
        break
    fi
        echo "Mes:" ${mes}
done
echo "Ciclo terminado"

Instruccion continue#

#!/usr/bin/env bash
# Escript que salta la ejecucion al encontrar la condicion indicada.
for mes in enero febrero marzo abril mayo junio julio agosto septiembre octubre noviembre diciembre
do
    if [ "${mes}" == "octubre" ]
    then
        continue
    fi
        echo "Mes:" ${mes}
done
echo "Ciclo terminado"

Ejercicios#

  1. Realizar un script que lea el archivo /etc/passwd y lo imprima por columnas.
  2. Realizar un script que basado en el punto 1 muestre unicamente el usuario y la shell asignada.

Ref.: Comando cut y Comando awk.