#!/bin/bash
#A=()
declare -a A
for i in {0..10}
do
let v=i+10
A[$i]=$v
done
STR=
for i in {0..10}
do
STR="$STR $i " # Para prueba posterior
echo "$i -> " ${A[$i]}
done
echo "-------------------------------------"
i=0
# Cuidado con el espacio despues de [
while [ $i -lt 10 ]
do
echo "$i -> " ${A[$i]}
let i=i+1
done
echo "-------------------------------------"
while [ $i -gt 0 ]
do
let i=i-1
echo -n "$i -> " ${A[$i]}
if [ $i -gt 4 ]
then
echo
continue
fi
echo " **"
if [ $i -eq 1 ]
then
break
fi
done
for i in $STR; do echo -n "${A[$i]} "; done
echo
while true ; do echo "Aw"; sleep 1; done Bash nos ofrece construcciones for y while
para generar bucles. Al igual que en otros lenguajes, la declaración
for nos permite iterar sobre la secuencia indicada. Cuando
queremos iterar sobre una secuencia numérica, debemos generarla nosotros
mismos usando un operador rango por ejemplo. Otra alternativa es
utilizar el programa seq:
for i in $(seq 0 10}
do
let v=i+10
A[$i]=$v
doneEl bucle while sigue la estructura clásica de este tipo
de bucles en todos los lenguajes y hace uso del programa [
para evaluar expresiones condicionales, si bien podemos usar cualquier
otro programa y usar el valor que devuelve como condición para
while. En ese caso el código de retorno del programa se
utilizará, y el bucle continuará mientras ese código sea 0.
Por ejemplo, la siguiente secuencia de comandos producirá un bucle infinito usando como salida el valor devuelto por un programa externo. Observad que el valor 0 es true (el programa se ejecutó con éxito) y un valor distinto de 0 significa que falso (el programa retornó un error).
$ cat > mitrue.c << EOM
> int main () {return 0;}
> EOM
$ make mitrue
cc mitrue.c -o mitrue
$ while ./mitrue; do echo "HELLO"; sleep 1; done
El siguiente fragmento de código muestra un bucle infinito equivalente en bash.
while true
do
echo "Hasta el infinito y más allá"
doneSABÍAS QUE
trueyfalseson programas que devuelven respectivamente los valores 0 (ejecución correcta) y 1 (error). Compruébalo:$ true; echo $? 0 $ false; echo $?
Otras formas de escribir bucles infinitos en bash son:
while :; do echo "HELLO"; sleep 1; done
# Observad los espacios entre los parénmtesis y ;;
for (( ;; )) ; do echo "HELLO"; sleep 1; done
Bash también nos ofrece la posibilidad de utilizar bucles
until. La sintaxis es idéntica a la de los bucles
while, pero en lugar de ejecutar el bucle mientras la
condición se cumple, lo harán hasta que la condición se cumpla.
Finalmente, Bash nos permite utilizar bucles for con
sintaxis estilo C. Algo como eso:
for ((i = 0; i < 10; i++)); do echo "Counter $i"; doneBash nos ofrece los típicos continue y
break para repetir el ciclo prematuramente o terminar el
bucle, igual que hemos visto en otros lenguajes de programación.
Finalmente, Bash nos permite utilizar for para iterar
fácilmente sobre listas, como por ejemplo el contenido de un
directorio.
for a in *; do echo "Fichero: $a"; doneEl * de la expresión anterior se expande en una cadena
de caracteres conteniendo todos los nombres de los ficheros en el
directorio actual separados por espacios. For segmenta la
cadena y nos permite iterar a través de ella. Podemos sustituir el
* por expresiones más complejas como *.jpg
(lista todos ficheros jpeg) o *[ch] (lista todos los
ficheros terminando en c o h).
Resumen
- Bash ofrece bucles
for,whileyuntil. - Bash ofrece las palabras clave
continueybreak, para controlar el flujo de los bucles.
■
