No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
0 Hrs
48 Min
56 Seg
Curso de Programación en Bash Shell

Curso de Programación en Bash Shell

Marco Antonio Toscano Freire

Marco Antonio Toscano Freire

Sentencia for loop

24/43
Recursos

La sentencia For es esa que se suele utilizar mucho cuando se quiere recorrer o iterar sobre una lista de valores. En Bash también soporta el For loop expression el cual tiene tres bloques, tanto de inicialización, condición e iteración.

Aportes 29

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 - @martosfre
function iterarListaNumeros   {
  arregloNumeros=(1 2 3 4 5 6)
  echo "Iterar en la Lista de Números"
  for num in ${arregloNumeros[*]}
  do
      echo "Número: $num"
  done
}

function iterarCadena {

  echo "Iterar en la lista de Cadenas"
  for nom in "Marco" "Pedro" "Luis" "Daniela"
  do
    echo "Nombre : $nom"
  done
}

function iterarArchivos {
  echo "Iterar en Archivos"
  for fil in *
  do
      echo "Nombre archivo: $fil"
  done
}

function iterarComando {
  echo "Iterar utilizando un comando"
  for fil in $(ls)
  do
      echo "Nombre archivo: $fil"
  done
}

function iteracionTradicional {
  echo "Iterar utilizando el formato tradcional"

  for ((i=1; i<10; i++))
  do
      echo "Número: $i"
  done
}

option=0

echo -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 $option in
  1) iterarListaNumeros ;;
  2) iterarCadena ;;
  3) iterarArchivos ;;
  4) iterarComando ;;
  5) iteracionTradicional;;
  *) echo "opcion desconocida";;
esac

En lo personal me resultó útil para descomprimir archivos y darle nombre.



zipFiles=( "cajas-1" "frutas-1" "frutos-secos-legumbres-1" "frutos-secos-legumbres-2" "huevos-1" "verduras-1" "verduras-2" "verduras-3" )

echo "Descomprimir archivos ciclicamente"
for fil in ${zipFiles[*]}
do
unzip "$fil.zip" -d "$fil"
done

Me gustaría que por sentencia, vaya mostrando el resultado e explicándolo. Poco a poco, no todo al final.

Resumen de la clase

Sentencia for loop

Existen 3 formas de realizar un ciclo en bash:

  1. Sintaxis para recorrer listas (Similar a Python)
for i in lista
do
#Instrucciones
done
  1. Sintaxis sobre rango de valores
for i in $(seq rango)
do
#Instrucciones
done

El comando seq puede ser utilizado de las siguientes formas:

  • seq [último valor]
  • seq [primer valor] [último valor]
  • seq [primer valor] [incremento] [último valor]
  1. Sintaxis heredada de C
for (( inicializador; condición; contador ))
do
#Instrucciones
done

Apuntes del curso: https://github.com/francomanca93/bash-shell

Hola, dejo mi script.

# ! /bin/bash
# Programa para uso de for loop
# Author Diego Beltran histagram @diegodevelops

arregloNum=(1 2 3 4 5 6)

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.

Para los puristas si utilizan otro kernel: Shift + pg up or down

Entendido

#!/bin/bash
# Programa para utilziat loops
# DBZ


arregloNumeros=(1 2 3 4 5 6)

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 *.sh
do
    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

Iterating over ls output is fragile. Use globs.
Iterar sobre el comando ls es frágile, mejor usar comodín.

for fil in *
do
[[ -e $fil ]] || break
echo "$fil"
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()

Mi pequeño aporte 😃

zipFiles=( “folder1” “folder2” “folder3” “folder4” “folder5” “folder6” “folder7” “folder8” )

echo "Comprimir ficheros en un ciclo"
echo “”

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
#By Kevin J Figueroa

ar=(1 1 2 3 5 8 13 21)
st=(perro gato caballo canario hormiga)

for i in ${ar[*]}; do
        echo "array[$((c++))]: "$i
    done
echo -en "\n"
c=0
for i in ${st[*]}; do
        echo "string[$((c++))]: $i"
    done
c=0
echo -en "\n"
for i in *; do
        echo "file[$((c++))]: $i"
    done
c=0
echo -en "\n"
for i in $(ls)
    do
        echo "file[$((c++))]: $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: ```bash for variable in lista\_de\_elementos; do \# Código que se ejecutará para cada elemento done ``` \### Ejemplos: 1\. \*\*Iterar sobre una lista de valores:\*\* ```bash for i in 1 2 3 4 5; do echo "Número: $i" done ``` Este bucle imprimirá los números del 1 al 5. 2\. \*\*Iterar sobre archivos en un directorio:\*\* ```bash for file in /ruta/al/directorio/\*; do echo "Archivo: $file" done ``` Este ejemplo iterará sobre todos los archivos en el directorio especificado. 3\. \*\*Usar `seq` para iterar un rango de números:\*\* ```bash for i in $(seq 1 10); do echo "Número: $i" done ``` Esto imprimirá los números del 1 al 10 usando el comando `seq`. 4\. \*\*Bucle `for` en una sola línea (compacto):\*\* ```bash for i in {1..5}; do echo "Número: $i"; done ``` Esto hace lo mismo que los ejemplos anteriores, pero en una sola línea. \### Usos avanzados: \- \*\*Iterar sobre el resultado de un comando:\*\* ```bash for user in $(cat /etc/passwd); do echo "Usuario: $user" done ``` Este ejemplo iterará sobre cada línea del archivo `/etc/passwd`, que contiene información sobre los usuarios del sistema. El bucle `for` en Bash es muy flexible y se utiliza comúnmente para automatizar tareas repetitivas o para procesar listas de elementos.
Bash se parece a python o lo contrario. Total es que se parecen: bash: for num in ${array\[\*]} do this done python: for index in range(len(array)): print(f'index: {index} - value: {value\[index]}

Codigo

#!/bin/bash
# 16_forLoops.sh
# Author: Roberto Palacios

arrayNumbers=(1 2 3 4 5 6)

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

[⚠️] Hincapié

  • No iterar un Array sin antes convertilo en una lista envolviéndolo entre ${}

A mi me funcionaron las llaves en el for:

for ((i=1; i<10; i++)){
    echo "Número: $i"
}

En vez de:

ArIntegr=(1 2 3 4 5)
ArString=(a,b,c,d,e)

Intente:

ArIntegr=({1..5})
ArString=({A..B})

gracias

Genial la explicación.

Dejo acá el codigo.

# !/bin/bash
# Programa para ejemplificar el uso de la sentencia de iteraccion for
# Autor: Marco

arregloNumeros=(1 2 3 4 5 6)

echo "Iterar en la lista de numeros"
echo -e ""
for num in ${arregloNumeros[*]}
do
        echo "Numero: $num"
done

echo "+++++++++++++++++++++++++++++++++"

echo "Iterar en la lista de cadenas"
echo -e ""
for nom in "Marco" "Pedro" "Daniela" "Maria"
do
        echo "Nombre: $nom"
done

echo "+++++++++++++++++++++++++++++++++"
echo "Iterar en archivos"
echo -e ""
for fil in *
do
        echo "Nombre del archivo: $fil"
done

echo "+++++++++++++++++++++++++++++++++"
echo "Iterar en utilizando un comando"
echo -e ""
for fil in $(ls)
do
        echo "Nombre de archivo: $fil"
done

echo "+++++++++++++++++++++++++++++++++"
echo "Iterar utilizando el formato tradicional"
echo -e ""
for ((i=1; i<10; i++))
do
        echo "Numero: $i"
done```


Y el resultado:

Iterar en la lista de numeros

Numero: 1
Numero: 2
Numero: 3
Numero: 4
Numero: 5
Numero: 6
+++++++++++++++++++++++++++++++++
Iterar en la lista de cadenas

Nombre: Marco
Nombre: Pedro
Nombre: Daniela
Nombre: Maria
+++++++++++++++++++++++++++++++++
Iterar en archivos

Nombre del archivo: 10_download.sh
Nombre del archivo: 11_ifElse.sh
Nombre del archivo: 15_arreglos.sh
Nombre del archivo: 16_forLoop.sh
Nombre del archivo: 1_utilityPostgres.sh
Nombre del archivo: 2_variables_2.sh
Nombre del archivo: 2_variables.sh
Nombre del archivo: 3_tipoOperadores.sh
Nombre del archivo: 4_argumentos.sh
Nombre del archivo: 5_sustitucionComand.sh
Nombre del archivo: 6_readEcho.sh
Nombre del archivo: 7_read.sh
Nombre del archivo: 8_readValidate.sh
Nombre del archivo: 9_options.sh
Nombre del archivo: reto2.sh
Nombre del archivo: utilityHost.sh
+++++++++++++++++++++++++++++++++
Iterar en utilizando un comando

Nombre de archivo: 10_download.sh
Nombre de archivo: 11_ifElse.sh
Nombre de archivo: 15_arreglos.sh
Nombre de archivo: 16_forLoop.sh
Nombre de archivo: 1_utilityPostgres.sh
Nombre de archivo: 2_variables_2.sh
Nombre de archivo: 2_variables.sh
Nombre de archivo: 3_tipoOperadores.sh
Nombre de archivo: 4_argumentos.sh
Nombre de archivo: 5_sustitucionComand.sh
Nombre de archivo: 6_readEcho.sh
Nombre de archivo: 7_read.sh
Nombre de archivo: 8_readValidate.sh
Nombre de archivo: 9_options.sh
Nombre de archivo: reto2.sh
Nombre de archivo: utilityHost.sh
+++++++++++++++++++++++++++++++++
Iterar utilizando el formato tradicional

Numero: 1
Numero: 2
Numero: 3
Numero: 4
Numero: 5
Numero: 6
Numero: 7
Numero: 8
Numero: 9
btk@MOBEATS-SRV2:~/ShellCourses$ vi 16_forLoop.sh
btk@MOBEATS-SRV2:~/ShellCourses$ btk@MOBEATS-SRV2:~/ShellCourses$
btk@MOBEATS-SRV2:~/ShellCourses$ ./16_forLoop.sh
Iterar en la lista de numeros

Numero: 1
Numero: 2
Numero: 3
Numero: 4
Numero: 5
Numero: 6
+++++++++++++++++++++++++++++++++
Iterar en la lista de cadenas

Nombre: Marco
Nombre: Pedro
Nombre: Daniela
Nombre: Maria
+++++++++++++++++++++++++++++++++
Iterar en archivos

Nombre del archivo: 10_download.sh
Nombre del archivo: 11_ifElse.sh
Nombre del archivo: 15_arreglos.sh
Nombre del archivo: 16_forLoop.sh
Nombre del archivo: 1_utilityPostgres.sh
Nombre del archivo: 2_variables_2.sh
Nombre del archivo: 2_variables.sh
Nombre del archivo: 3_tipoOperadores.sh
Nombre del archivo: 4_argumentos.sh
Nombre del archivo: 5_sustitucionComand.sh
Nombre del archivo: 6_readEcho.sh
Nombre del archivo: 7_read.sh
Nombre del archivo: 8_readValidate.sh
Nombre del archivo: 9_options.sh
Nombre del archivo: reto2.sh
Nombre del archivo: utilityHost.sh
+++++++++++++++++++++++++++++++++
Iterar en utilizando un comando

Nombre de archivo: 10_download.sh
Nombre de archivo: 11_ifElse.sh
Nombre de archivo: 15_arreglos.sh
Nombre de archivo: 16_forLoop.sh
Nombre de archivo: 1_utilityPostgres.sh
Nombre de archivo: 2_variables_2.sh
Nombre de archivo: 2_variables.sh
Nombre de archivo: 3_tipoOperadores.sh
Nombre de archivo: 4_argumentos.sh
Nombre de archivo: 5_sustitucionComand.sh
Nombre de archivo: 6_readEcho.sh
Nombre de archivo: 7_read.sh
Nombre de archivo: 8_readValidate.sh
Nombre de archivo: 9_options.sh
Nombre de archivo: reto2.sh
Nombre de archivo: utilityHost.sh
+++++++++++++++++++++++++++++++++
Iterar utilizando el formato tradicional

Numero: 1
Numero: 2
Numero: 3
Numero: 4
Numero: 5
Numero: 6
Numero: 7
Numero: 8
Numero: 9

Aquí se explica con mas detalle el comando for.

https://codingornot.com/08-bash-ciclos-for

#!/bin/bash

numbers_array=(1 2 3 4 5 6)


echo "Numbers iteration:"
for number in ${numbers_array[*]}
do
    echo "Number: $number"
done


echo -e "\nStrings iteration:"
for name in "Marco" "Pedro" "Luis" "Daniela"
do
    echo "Name: $name."
done


echo -e "\nFiles iteration:"
for file in *
do
    echo "Filename: $file"
done


echo -e "\nFiles iteration:"
for file in $(ls)
do
    echo "Filename: $file"
done


echo -e "\nNumbers iteration with three expression for loop"
for ((i=0;i<10;i++))
do
    echo "Number: $i"
done