Ciclos Repetitivos
comando para crear un ciclo repetitivo:
Ciclo | Descripción |
---|---|
while [ condición ]; do | Repetir un bloque de código mientras la condición de chequeo sea verdadera |
until [ condición ]; do | Repetir un bloque de código mientras la condición de chequeo sea falsa |
for .. do | Repetir un bloque de código una cantidad de veces determinada. |
for variable in lista | Ejecuta un bloque de código por cada elemento de la lista |
Instrucción while
La instrucción while permite ejecutar un bloque de código mientras la codición de control del ciclo sea verdadera.
Ejecutar un ciclo hasta que una codición sea verdadera
El siguiente ciclo repetitivo se repetirá mientras la variable contador sea menor que 10.
#!/bin/bash
contador=0
while [ $contador -lt 10 ]; do
echo $contador
((contador++))
done
0
1
2
3
4
5
6
7
8
9
Ejecutar un ciclo infinito
En el siguiente ejemplo ls instrucción echo "Presione CTRL-C para salir del script" se ejecutará cada 5 segundos (sleep 5) hasta que la combinación de teclas CTRL-C sea presionada.
#!/bin/bash
while :; do
echo "Presione CTRL-C para salir del script"
sleep 5
done
</div>
<div class='pageitem'>
Instrucción until
La instrucción until permite ejecutar un bloque de código mientras la _codición de control del ciclo sea _falsa.
Construir un menu
En este ejemplo se estará mostrando el menu mientras la variable opcion sea diferente de cero.
#!/bin/bash
opcion=
until [ "$opcion" = "0" ]; do
echo "
PROGRAM MENU
1 - Mostrar espacio libre en disco
2 - Mostrar memoria libre
0 - Finalizar
"
read -p "Seleccione una opcion: " opcion
echo ""
if [ $opcion -eq 1 ]; then
df
elif [ $opcion -eq 2 ]; then
free
fi
done
Instrucción for
La instrucción for permite ejecutar un bloque de código un número determinado de veces. Esta instrucción tiene varias formas de uso.
Ejecutar el ciclo por cada elemento de una lista
En el siguiente ejemplo se muestra como trabaja la instrucción for para recorrer los elementos de una lista
#!/bin/bash
for i in uno dos tres; do
echo $i
done
uno
dos
tres
Procesar un rango de números
For puede procesar un rango de números (de forma ascedente o descendente según se indique en el rango).
#!/bin/bash
for valor in {1..10}; do
echo $valor
done
1
2
3
4
5
6
7
8
9
10
For al estilo C
For tiene una variante en su sintasis para hacer parecido a la sintaxis usada en lenguaje C.
#!/bin/bash
for ((i = 1; i <= 5; i++)); do
echo $i
done
1
2
3
4
5
La instrucción for se ejecuta mientras el valor de i sea menor o igual a 5 y en cada ciclo i incrementa su valor en 1 (i++).
Modificar la ejecución de un ciclo repetitivo.
Las instrucciones break y continue permiten modificar la ejecución de un ciclo repetitivo.
- break finaliza la ejecución del ciclo repetitivo.
- continue salta a la siguiente iteración.
Interrumpir un ciclo repetitivo con break
En los siguientes ejemplos se muestra el uso de la instrucción break para finalizar un ciclo while, until y for.
#!/bin/bash
i=0
while [[ $i -lt 11 ]]
do
if [[ "$i" == '2' ]]
then
echo "Número $i!"
break
fi
echo $i
((i++))
done
echo "Listo!"
0
1
Número 2!
Listo!
#!/bin/bash
i=0
until [[ $i -gt 10 ]]
do
if [[ $i -eq 2 ]]
then
echo "Número $i!"
break
fi
echo $i
((i++))
done
echo "Listo!"
0
1
Número 2!
Listo!
#!/bin/bash
for i in {1..10}
do
if [[ $i == '2' ]]
then
echo "Número $i!"
break
fi
echo "$i"
done
echo "Listo!"
1
Número 2!
Listo!
Modificar el flujo de un ciclo repetitivo con continue
En los siguientes ejemplos se muestra el uso de la instrucción continue para modificar la ejecución un ciclo while, until y for.
#!/bin/bash
i=0
while [[ $i -lt 11 ]]
do
if [[ "$i" == '9' ]]
then
echo "Número $i!"
((i++))
continue
fi
echo $i
((i++))
done
0
1
2
3
4
5
6
7
8
Número 9!
10
#!/bin/bash
i=0
until [[ $i -gt 10 ]]
do
if [[ $i -eq 9 ]]
then
echo "Número $i!"
((i++))
continue
fi
echo $i
((i++))
done
0
1
2
3
4
5
6
7
8
Número 9!
10
#!/bin/bash
for i in {1..10}
do
if [[ $i == '9' ]]
then
echo "Número $i!"
continue
fi
echo "$i"
done
1
2
3
4
5
6
7
8
Número 9!
10