Bucles en Bash
SOLUCIONARIO
Bucles en Bash
2025-04-27
Por
Occam's Razor

#!/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
done

El 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á"
done

SABÍAS QUE

true y false son 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"; done

Bash 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"; done

El * 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, while y until.
  • Bash ofrece las palabras clave continue y break, para controlar el flujo de los bucles.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)