No tienes acceso a esta clase

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

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 24

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

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

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.

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

# 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 *

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

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 “”

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

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

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

En vez de:

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

Intente:

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

[⚠️] Hincapié

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

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
[email protected]:~/ShellCourses$ vi 16_forLoop.sh
[email protected]:~/ShellCourses$ [email protected]:~/ShellCourses$
[email protected]:~/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

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

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()

A mi me funcionaron las llaves en el for:

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