En cualquier lenguaje de programación encontramos las estructuras que comúnmente llamamos bucles. Estas nos permiten realizar una operación las veces que sea necesario hasta cumplir una condición. Bash no es menos y podemos utilizar diversos tipos, veámoslos.
Si conoceis PHP, este for es más parecido al foreach que al for. Es decir, va a iterar sobre un conjunto de elementos. Vamos a escribir un ejemplo:
#!/bin/bash for i in $( ls ); do echo item: $i done
En este ejemplo estamos iterando sobre el resultado de el comando ls que nos listará el directorio actual. En la variable $i se incluye el resultado de la iteración sobre cada uno de los elementos del ls, y entre las instrucciones do y done incluimos lo que haremos en cada una de las vueltas. En este caso un echo de nuestra variable $i.
Si quisieramos hacer un for que fuera de 1 a 10 por ejemplo, deberíamos utilizar el comando seq que nos dará una secuencia de números. Veámoslo:
#!/bin/bash
for i in `seq 1 10`; do
echo $i
done
Al ejecutar este comando se ejecutará 10 veces y mostrará la variable $i que irá de 1 a 10. Podéis investigar un poco más sobre el comando seq ya que os permite empezar en un determinado valor o mostrar la secuencia con saltos de 2 en 2 números o los que necesitéis.
La estructura while va a ejecutarse mientras la condición que le indiquemos sea verdadera o hasta que invoquemos un break. En el ejemplo siguiente inicializamos un contador a 0 y solo saldremos del bucle cuando este sea mayor que 10. Para ello aumentamos en uno el contador cada vez que damos una vuelta en el bucle.
#!/bin/bash
contador=0
while [ $contador -lt 10 ]; do
echo valor actual $contador
let contador=contador+1
done
Por último veremos la estructura until. En realidad es muy parecida a while, de hecho su uso prácticamente sería cambiar while por until. Y la forma de evaluar la condición es al revés, es decir, se ejecuta mientras sea false la condición.
#!/bin/bash
contador=20
until [ $contador -lt 10 ]; do
echo valor actual $contador
let contador-=1
done
En este ejemplo inicializamos el contador a 20 y lo decreceremos hasta que sea menor que 10.
Recordad que podreis ver estos ejemplos en nuestra cuenta de github en el repositorio de bashscripting https://github.com/3pies/bashscripting