1. Inicio
  2. Tecnologia
  3. Bash
  4. Ciclos Repetitivos

Ciclos Repetitivos

Un ciclo repetivo es una estructura que permite repetir una serie de instrucciones una cantidad de veces. En Bash podemos utilizar los siguientes
comando para crear un ciclo repetitivo:
CicloDescripción
while [ condición ]; doRepetir un bloque de código mientras la condición de chequeo sea verdadera
until [ condición ]; doRepetir un bloque de código mientras la condición de chequeo sea falsa
for .. doRepetir un bloque de código una cantidad de veces determinada.
for variable in listaEjecuta 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.

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