Domina los loops anidados en Bash para automatizar tareas repetitivas con precisión. Aprenderás a usar un for primario que recorre archivos y un for secundario que itera un rango {1..4}, concatenando resultados con un simple echo. El enfoque es directo, práctico y aplica a entornos como Ubuntu con scripts .sh.
¿Qué son los loops anidados en Bash y para qué sirven?
Los loops anidados son una sentencia de iteración dentro de otra. Funcionan de forma similar a los IF anidados, pero con bucles: un bucle externo recorre una lista y un bucle interno procesa cada elemento con otra lista o rango. Así se multiplican combinaciones y se automatiza trabajo repetitivo.
Sentencia de iteración: estructura que repite acciones con do y done.
For primario: recorre los archivos del directorio actual.
For secundario: itera un rango definido como {1..4}.
Lista de valores: puede ser un conjunto de archivos o números.
Concatenación: une variables para formar salidas claras con echo.
Semejanza con IF anidados: lógica anidada, pero con bucles.
¿Cómo se construye el for primario y el for secundario?
La secuencia parte de crear un nuevo programa .sh, imprimir un título y luego armar el bucle externo e interno. Se enfatiza reutilizar conceptos previos del for y mantener el formato con do/done para cada bucle.
Pasos clave:
Crear un script nuevo, por ejemplo, anidados.sh. Guardar y salir con :wq.
Imprimir un título con echo: "loops anidados".
Armar el for primario para recorrer archivos en el directorio.
Dentro, construir el for secundario con un rango {1..4}.
Usar echo para concatenar el nombre del archivo y el número del rango.
Cerrar cada bucle con done.
Ejemplo de fragmento en Bash:
echo"loops anidados"# for primario: recorre archivos del directorio actualforfilein *;do# for secundario: recorre un rango del 1 al 4fornombrein{1..4};doecho"nombre del archivo: ${file}_${nombre}"donedone
Claves técnicas:
for recorre listas como * o {1..4}.
do/done delimitan el bloque de iteración.
echo imprime la concatenación de variables: ${file}_${nombre}.
¿Qué resultado se obtiene y qué aprendizajes clave deja?
Al ejecutar el script, se imprime cada nombre de archivo del directorio cuatro veces, una por cada valor del rango. La salida evidencia que el for interno se repite por cada iteración del for externo, confirmando el patrón de iteración dentro de iteración.
Aprendizajes clave:
Loops anidados: cómo estructurarlos con claridad.
for primario vs. for secundario: responsabilidades separadas y legibles.
Rangos con {1..4}: forma rápida de generar números consecutivos.
Concatenación en Bash: construir mensajes útiles para depurar y documentar.
Buenas prácticas: reutilizar conceptos previos y validar salidas.
¿Tienes otros usos de loops anidados en Bash o variaciones con rangos distintos? Comparte tus ideas y ejemplos en los comentarios.
In Bash, each of these notations serves a different purpose:
1. $\[ something ]: This notation is deprecated and should not be used. It was used for arithmetic expansion in older versions of Bash. The preferred modern syntax for arithmetic expansion is $(( something )).
2. ${ something }: This notation is used for variable expansion and allows you to specify the boundaries of a variable name explicitly. It's useful when you want to concatenate a variable with other text or when the variable name might be ambiguous. For example, ${var}iable would expand to the value of the variable $var followed by the string iable.
3. $( something ): This notation is used for command substitution. It allows you to execute a command and use its output as part of another command or expression. For example, $(date) would execute the date command and substitute its output (the current date and time) into the command or expression.
4. $(( something )): This notation is used for arithmetic expansion. It allows you to perform arithmetic operations and evaluate arithmetic expressions. For example, $(( 2 + 3 )) would evaluate to 5.
To summarize:
- ${ something }: Variable expansion
- $( something ): Command substitution
- $(( something )): Arithmetic expansion
The $\[ something ] notation is outdated and should be avoided in favor of $(( something )) for arithmetic operations.
import os
\# Programa para ejemplificar el uso de loops anidados
defmain():  print("Loops anidados")  \# Iterar sobre los archivos en el directorio actual  for file in os.listdir('.'):  \# Iterar en un rango de 1 a 4  for nombre in range(1, 5):  print(f"nombre archivo: {file} \_ {nombre}")if \_\_name\_\_ =="\_\_main\_\_":  main()
Los loops anidados en Bash son bucles que se ejecutan dentro de otros bucles. Esto significa que, por cada iteración del bucle externo, el bucle interno se ejecutará completamente.
### Ejemplo de loops anidados en Bash:
\#!/bin/bash
foriin{1..3}# Bucle externodo  echo "Bucle externo, i = $i"  for j in {1..2} # Bucle interno  do  echo " Bucle interno, j = $j"  donedone
### Salida esperada:
Bucle externo, i =1 Bucle interno, j =1 Bucle interno, j =2Bucle externo, i =2 Bucle interno, j =1 Bucle interno, j =2Bucle externo, i =3 Bucle interno, j =1 Bucle interno, j =2
### Explicación:
- El bucle externo (for i in {1..3}) se ejecuta tres veces.
- Por cada iteración del bucle externo, el bucle interno (for j in {1..2}) se ejecuta completamente, lo que significa que imprimirá los valores de j dos veces antes de que el bucle externo pase a la siguiente iteración.
Este concepto es útil cuando se necesita trabajar con estructuras repetitivas o matrices multidimensionales.
Script escrito y probado en Ubuntu 18.04
#Programa para mostrar la serie de Fibonacci hasta la posición introducida
5 declare -i loop_control=2 #declare "loop_control" as Integer
6 declare -i fib_num_A=0
7 declare -i fib_num_B=1
8 declare -i limit_serie=3
9 declare -i stop=0
10
11 echo "FIBONACCI SERIE"
12 read -p "Enter the length of fibbonacci serie (min. 3): " limit_se rie
13 #echo -e ""
14
15 while (( $stop == 0 ))
16 do
17 if (( $limit_serie < 3 )); then
18
19 echo -e "Limit must be at least 3!!"
20 read -p "Enter the length of fibbonacci serie (min. 3): " limit_serie
21
22 else
23 # The serie is printed
24
25 echo "Num 1: $fib_num_A"
26 echo "Num 2: $fib_num_B"
27
28 while (( $loop_control < $limit_serie )) # -ne. Not Equal
29 do
30 aux=$((fib_num_A+fib_num_B))
31 echo "Num $((loop_control+1)): $aux"
32
33 fib_num_A=$fib_num_B
34 fib_num_B=$aux
35
36 loop_control=$loop_control+1
37 done
38 stop=1 #stop the main while loop
39 fi
40 done
Compi te recomiendo que cuando compartas un codigo uses la herramienta de la caja de comentarios "</> Código" ya que de la manera que lo compartes es visualmente molesto.
En Bash scripting, puedes ejecutar comandos de la terminal utilizando la sintaxis de comillas invertidas (````) o la sintaxis $(). Ambas formas permiten ejecutar un comando y capturar su salida para ser utilizada en tu script.
Ejemplo con comillas invertidas:
resultado=`ls -l`echo"El contenido del directorio es: $resultado"
Ejemplo con $():
resultado=$(ls -l)echo"El contenido del directorio es: $resultado"
Ambos ejemplos son equivalentes. La salida del comando ls -l se captura en la variable resultado, y luego se imprime en el siguiente comando echo. Puedes utilizar cualquiera de las dos formas según tu preferencia o necesidades. La forma $() es más moderna y se recomienda generalmente por ser más legible y fácil de anidar.
En Bash scripting, puedes ejecutar comandos de la terminal utilizando la sintaxis de comillas invertidas () o la sintaxis $()`. Ambas formas permiten ejecutar un comando y capturar su salida para ser utilizada en tu script.
Ejemplo con comillas invertidas:
resultado=`ls -l`echo"El contenido del directorio es: $resultado"
Ejemplo con $():
resultado=$(ls -l)echo"El contenido del directorio es: $resultado"
Ambos ejemplos son equivalentes. La salida del comando ls -l se captura en la variable resultado, y luego se imprime en el siguiente comando echo. Puedes utilizar cualquiera de las dos formas según tu preferencia o necesidades. La forma $() es más moderna y se recomienda generalmente por ser más legible y fácil de anidar.
#!/bin/bash#Programa para ejemplificar el uso de los Loops Anidados#Author: Juan Manuelecho"Loops Anidados"forfilin$(ls)dofornombrein{1..4}doecho"Nombre Archivo: $fil _ $nombre"donedone
# !/bin/bash
# Programa para uso de loops anidados
# AuthorDiegoBeltran histagram @diegodevelops
echo "Loops anidados"for fil in$(ls)dofor nombre in{1..4}do echo "nombre del archivo es:$fil y cuenta del anidado es $nombre" done
done```
Saludos
# !/bin/bash
# Programa para ejemplificar el uso de los loops anidados
# Autor:JoseSuarezecho "Loops Anidados"for fil in$(ls)dofor nombre in{1..4}do echo "Nombre Archivo: $fil _ $nombre" done
done
#!/bin/bashfor file in$(ls)dofor number in{1..4}do echo "Filename: $file-$number" done
done
Solo muestra las líneas de operaciones no de los comentarios, buen programa, en el done del while se lee como finaliza cuando sea menor a todos los $files del for