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 27

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

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

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

Mi peque帽o aporte 馃槂

zipFiles=( 鈥渇older1鈥 鈥渇older2鈥 鈥渇older3鈥 鈥渇older4鈥 鈥渇older5鈥 鈥渇older6鈥 鈥渇older7鈥 鈥渇older8鈥 )

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=(鈥渇irst鈥 鈥渟econd鈥 鈥渢hird鈥 鈥渇ourth鈥 鈥渇ifth鈥 鈥渟ixth鈥)
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锟絥锟 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) #鈥榣s鈥 -> 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

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