La sentencia for en bash es una herramienta esencial para recorrer valores de forma clara y eficiente. Aquí verás, paso a paso, cómo iterar listas, cómo expandir arreglos, cómo usar comodines y cómo aplicar el formato tradicional de tres bloques con do/done sin enredos, tal como se mostró en un entorno Ubuntu.
¿Qué es la sentencia for en bash y cuándo usarla?
La idea clave: for recorre una lista de valores. A diferencia de un arreglo, que es una estructura de datos, el for itera sobre una lista; por eso, cuando tienes un arreglo necesitas expandirlo a lista antes de iterar. También se usa con comodines como el asterisco para archivos y con sustitución de comandos para procesar salidas de utilidades como ls.
Puntos clave.
Variable alias: identificador temporal para cada elemento de la lista.
Palabras reservadas: se abre con do y se cierra con done.
Listas vs arreglos: se itera listas; los arreglos se expanden para formar listas.
Comodín asterisco (*): expande a los nombres en el directorio actual.
Sustitución de comandos $(...): convierte la salida de un comando en una lista de ítems.
¿Cómo iterar listas, arreglos y archivos con for?
En la práctica, se mostraron tres escenarios frecuentes: números, cadenas y archivos. La lógica es la misma: definir la lista, alias para cada ítem, y dentro de do imprimir o procesar.
¿Cómo iterar una lista de números?
Si los números están en un arreglo, primero se expanden con asterisco para formar una lista. Así, el for recorre cada valor.
numeros=(12345)echo"Iterar en la lista de números"fornumin"${numeros[*]}";doecho"Número: $num"done
Claves.
${arreglo[*]}: expande el arreglo como una lista.
num: alias que toma cada valor.
¿Cómo iterar una lista de cadenas?
Se puede escribir la lista explícitamente, con cada elemento separado por espacios. Se usaron nombres como ejemplo.
echo"Iterar en la lista de cadenas"fornomin"Marco""Pedro";doecho"Nombre: $nom"done
Claves.
Lista explícita: elementos entre comillas para conservar espacios o caracteres especiales.
Salida legible: concatenar etiquetas como "Nombre:" facilita la lectura.
¿Cómo iterar archivos y salidas de un comando?
Dos variantes útiles al trabajar con el sistema de archivos: con comodines y con sustitución de comandos.
# Con comodín: todo en el directorio actualecho"Iterar en archivos"forfilein *;doecho"Nombre archivo: $file"done# Con sustitución de comandos: salida de lsecho"Iterar en archivos (vía comando)"forfilein$(ls);doecho"Nombre archivo: $file"done
Claves.
Comodín*: genera la lista de archivos automáticamente.
$(ls): convierte la salida del comando en una lista para el bucle.
Dependerá de las necesidades del programa elegir una u otra.
¿Cómo usar el formato tradicional de for con tres bloques?
También se revisó el formato tradicional, similar al de otros lenguajes, compuesto por inicialización; condición; iteración. En bash, se escribe con doble paréntesis y se mantiene el uso de do/done.
echo"Iteración con formato tradicional"for(( i=1; i<=10; i++));doecho"Número: $i"done
Claves.
Inicialización: i=1.
Condición: i<=10.
Iteración: i++.
Sintaxis de bash: for (( ... )); do ... done.
En conjunto, viste cómo usar for para listas, arreglos expandidos, archivos con comodín, salidas de comandos y el formato tradicional de tres bloques. Si quieres, comenta qué caso usarías en tu próximo script y por qué.
les dejo el codigo un poco modulado, con opciones:
# ! /bin/bash# Programa para ejemplificar el uso de la sentencia de iteración for# Autor: Marco Toscano Freire - @martosfrefunctioniterarListaNumeros{arregloNumeros=(123456)echo"Iterar en la Lista de Números"fornumin${arregloNumeros[*]}doecho"Número: $num"done}functioniterarCadena{echo"Iterar en la lista de Cadenas"fornomin"Marco""Pedro""Luis""Daniela"doecho"Nombre : $nom"done}functioniterarArchivos{echo"Iterar en Archivos"forfilin *
doecho"Nombre archivo: $fil"done}functioniterarComando{echo"Iterar utilizando un comando"forfilin$(ls)doecho"Nombre archivo: $fil"done}functioniteracionTradicional{echo"Iterar utilizando el formato tradcional"for((i=1; i<10; i++))doecho"Número: $i"done}option=0echo -e "\n elija una opcion
1 iterar lista de numeros
2 iterar lista de cadenas
3 iterar en Archivos
4 iterar utilizando comando
5 iteracion tradicional"read -n1 option
echo -e "\n"case$optionin1) iterarListaNumeros ;;2) iterarCadena ;;3) iterarArchivos ;;4) iterarComando ;;5) iteracionTradicional;; *)echo"opcion desconocida";;esac
# !/bin/bash
# Programa para uso de for loop
# AuthorDiegoBeltran histagram @diegodevelops
arregloNum=(123456)echo "iterar en lista de numeros"for num in ${arregloNum[*]}do echo "Número: $num"done
echo "Iterar lista de cadenas"for nom in"Diego""Andres""Mariana""Beatriz"do echo "Nombre es: $nom"done
echo "Iterar en Archivos"for file in*do echo "nombre archivo es: $file"done
echo "Iterar usando comando"for fil in$(ls)do echo "nombre archivo ls: $fil"done
echo "Iterar usando formato tradicional"for(( i=1; i<10; i++))do echo "Numero es for: $i"done```
Saludos.
#!/bin/bash# Programa para utilziat loops
# DBZarregloNumeros=(123456)echo "Iterar en la Lista de Números"for num in ${arregloNumeros[*]}do echo "Número:$num"done
echo "******************************************"echo "Iterar en la lista de Cadenas"for nom in"David""Ana Maria""Diana""Isabela""Norma"do echo "Nombres:$nom"done
echo "******************************************"echo "Iterar en Archivos"for fil in*.shdo echo "Nombre archivo:$fil"done
echo "******************************************"echo "Iterar utilizando un comando"for fil in$(ls)do echo "Nombre archivo:$fil"done
echo "******************************************"echo "Iterar utilizando el formato tradcional"for((i=1; i<15; i++))do echo "Número:$i"done
¿ Cómo utilizar la sentencia for loop ?
Se puede iterar lista de valores de: números, cadenas, nombre de archivos, argumentos de línea de comandos. Soporta también el for loop three expression. El cual tiene tres bloques, tanto de inicialización, condición e iteración.
# imprimir todos los valores
echo "Arreglo de Números: ${arregloNumeros[*]}"
# imprime tamaño de los arreglos
echo "Tamaño del arreglo de Números: ${#arregloNumeros[*]}"# imprimir las la posicion 3 de los arreglos
echo "Posición 3 del arreglo de Números: ${arregloNumeros[3]}"
# imprimir los indeces de los arreglos
echo "Indeces de los arreglo de Números: ${!arregloNumeros[@]}"# para este caso @ funciona igual que *
Me gusto mucho esta clase porque vengo con un background de Backend con Django y me permitio terminar de entender de donde proviene la sintaxis de Python con su mismisimo for i in range()
for ((i=0; i< ${#zipFiles[*]}; i++))
do
if [ -d ${zipFiles[i]} ]; then
zip -r "${zipFiles[i]}.zip" "${zipFiles[i]}"
else
mkdir ${zipFiles[i]}
zip -r "${zipFiles[i]}.zip" "${zipFiles[i]}"
fi
done
Script escrito y probado en Ubuntu 18.04
5 array_fib=(1 1 2 3 5 8)
6 array_chain=("first" "second" "third" "fourth" "fifth" "sixth")
7 counter=0
8
9 #Print the values of the fib list
10 echo "Iteració nde la lista de nums fib"
11
12 for num in ${array_fib[]}
13 do
14 echo "Value $counter: $num"
15 counter=$((counter+1))
16 done
17 counter=0
18 echo -e ""
19
20 #Print the values of the chain list
21 echo "Iteraci�n� de la lista de chains"
22
23 for chain in ${array_chain[]}
24 do
25 echo "Value $counter: $chain"
26 counter=$((counter+1))
27 done
28 counter=0
29 echo -e ""
30
31 #Print a list of files in the actual directory (where this file
32 # is executed)
33 echo "Listar los file del directorio especificado"
34
35 for file in *
36 do
37 counter=$((counter+1))
38 echo "File $counter: $file"
39 done
40 counter=0
41 echo -e ""
42
43 #Make the iteration using a OS command
44 echo "Iteracion de lista mediante un comando"
45
46 for item in $(ls) #'ls' -> OS command
47 do
48 counter=$((counter+1))
49 echo "File $counter: $item"
50 done
51 counter=0
52 echo -e ""
53
54 #Make the iteration using the "for loop three expression"
55 echo "Iteracion mediante el uso de la estructura clasica de for"
56
57 for ((i=1; i<=10; i++)){
58 counter=$((counter+1))
59 echo -e "Num $counter"
60 }
61 counter=0
62 echo -e ""
#!/bin/bash# 16_forLoops.sh# Author:RobertoPalaciosarrayNumbers=(123456)echo -e "\n*---Iteration list of numbers---*"for num in ${arrayNumbers[*]}do echo "Number: $num"done
echo -e "\n*---Iteration list of chain---*"for name in"Pedro""Juan""Maria"do echo "Names: $name"done
echo -e "\n*---Iteraration on Files---*"for file in*do echo "File Name: $file"done
echo -e "\n*---Iteration using a command---*"for file in$(ls)do echo "File name: file"done
echo -e "\n*---Iteration using the Traditional way---*"for((i=1; i<10; i++))do echo "Numbers: $i"done
El bucle for en Bash es una estructura de control que te permite iterar sobre una lista de elementos o realizar acciones un número determinado de veces. Su sintaxis básica es la siguiente:
### Sintaxis básica:
forvariablein lista\_de\_elementos;do  \# Código que se ejecutará para cada elementodone