Bucle for en Bash para Linux
Definiciones
Un bucle es un conjunto de comandos que la computadora debe repetir hasta que se cumpla una condición determinada. Puede interrumpirse antes de que se cumpla esa condición mediante un comando específico. Se usa para contar, buscar información o poblar estructuras de datos.
En informática existen dos bucles principales: el bucle for y el bucle while.
Bucle for:
En informática, un bucle for es una instrucción de un lenguaje de programación que permite ejecutar código de forma repetida. Se clasifica como una instrucción de iteración. A diferencia de otros tipos de bucles, como el while, el for se distingue por tener un contador o variable de bucle explícita.
Bucle while:
En la mayoría de los lenguajes de programación, un bucle while es una instrucción de control de flujo que permite ejecutar código de forma repetida basándose en una condición booleana. Se puede pensar en él como un if que se repite.
Con eso claro, comencemos con el artículo sobre el bucle for en Bash.
Cómo usar el bucle for en Bash
En Bash hay dos formas de implementar un bucle for:
- Indicarle a
forque actúe sobre una lista predefinida de elementos, con la instrucciónfor … in. - Usar la sintaxis de C:
for (( exp1, exp2, exp3 )).
Ejemplos simples de cada forma:
Usando la instrucción for ... in
for i in 1 2 3 4
do
echo "Número $i"
done
Usando la instrucción for ((exp1, exp2, exp3))
for (( i=1; i<=4; i++))
do
echo "Número $i"
done
El resultado es el mismo en ambos casos:
Número 1
Número 2
Número 3
Número 4
Ejemplos
Contar:
#!/bin/bash
for i in {1..25}
do
echo $i
done
O bien:
#!/bin/bash
for ((i=1;i<=25;i+=1))
do
echo $i
done
Contar de n en n pasos:
#!/bin/bash
for i in {0..25..5}
do
echo $i
done
Esto cuenta de 5 en 5.
Contar hacia atrás:
#!/bin/bash
for i in {25..0..-5}
do
echo $i
done
Actuar sobre archivos:
Uno de los mejores usos del bucle for en Bash es trabajar con archivos:
for file in ~/*.md
do
echo $file
done
Ese ejemplo lista todos los archivos con extensión .md, equivalente a ls *.md.
break y continue en el bucle for
A veces querrás interrumpir el bucle antes de que termine. Por ejemplo, cuando buscas que se cumpla una condición:
for i in [serie]
do
comando1
comando2
if (condición)
then
break
fi
comando3
done
Con break detienes completamente el bucle. Con continue, en cambio, saltas al siguiente valor de la serie sin ejecutar el resto de los comandos de esa iteración:
for i in [serie]
do
comando1
comando2
if (condición)
continue
fi
comando3
done
Bucles for en una sola línea
En la línea de comandos no siempre se insertan los bucles en scripts, por lo que a veces los escribimos en una sola línea.
Con contador:
for i in {1..3}; do echo 'hola'; done
O bien:
for ((i=1;i<=3;i++)); do echo "hola"; done
Números pares hasta 30:
for ((i=0;i<=30;i+=2)); do echo "$i es par"; done
Copiar todos los archivos PDF a un directorio de respaldo:
for i in *.pdf; do cp $i /backup/; done
Agregar extensión .bak a todos los archivos .txt:
for i in *.txt; do mv $i $(basename $i .txt).bak; done
Última actualización: junio de 2019
Por: Guillermo Garron