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.
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#
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 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
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#
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#
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#
- Realizar un script que lea el archivo /etc/passwd y lo imprima por columnas.
- Realizar un script que basado en el punto 1 muestre unicamente el usuario y la shell asignada.
Ref.: Comando cut y Comando awk.
