Introducción
El for
loop es una funcionalidad de programación esencial que pasa por una lista de elementos. Para cada uno de esos elementos, el for
loop ejecuta un conjunto de comandos. El comando ayuda a repetir procesos hasta una condición de finalización.
Ya sea que esté revisando una serie de números o cambiando el nombre de los archivos, for
los bucles en los scripts de Bash brindan una manera conveniente de listar elementos automáticamente.
Este tutorial muestra cómo usar Bash for
bucles en scripts.
Requisitos previos
- Acceso a la terminal/línea de comando (CTRL +ALT +T ).
- Un editor de texto, como Nano o Vi/Vim.
- Terminología de programación elemental.
Script Bash para bucle
Usa el for
bucle para iterar a través de una lista de elementos para ejecutar los comandos indicados.
La sintaxis básica para for
el bucle en los scripts de Bash es:
for <element> in <list>
do
<commands>
done
El elemento, la lista y los comandos analizados a través del bucle varían según el caso de uso.
Ejemplos de bucle For de Bash
A continuación se muestran varios ejemplos del for
bucle en scripts de Bash. Cree un script, agregue el código y ejecute los scripts de Bash desde la terminal para ver los resultados.
Artículos individuales
Iterar a través de una serie de elementos dados e imprimir cada uno con la siguiente sintaxis:
#!/bin/bash
# For loop with individual numbers
for i in 0 1 2 3 4 5
do
echo "Element $i"
done
Ejecute el script para ver el resultado:
. <script name>
El script imprime cada elemento de la lista proporcionada en la consola.
Alternativamente, use cadenas en una lista separada por espacios:
#!/bin/bash
# For loop with individual strings
for i in "zero" "one" "two" "three" "four" "five"
do
echo "Element $i"
done
Guarde el script y ejecútelo desde la terminal para ver el resultado.
La salida imprime cada elemento en la consola y sale del ciclo.
Alcance
En lugar de escribir una lista de elementos individuales, use la sintaxis de rango e indique el primer y último elemento:
#!/bin/bash
# For loop with number range
for i in {0..5}
do
echo "Element $i"
done
El script genera todos los elementos del rango proporcionado.
La sintaxis de rango también funciona para letras. Por ejemplo:
#!/bin/bash
# For loop with letter range
for i in {a..f}
do
echo "Element $i"
done
El script envía letras a la consola en orden ascendente en el rango proporcionado.
La sintaxis de rango funciona para elementos en orden descendente si el elemento inicial es mayor que el final.
Por ejemplo:
#!/bin/bash
# For loop with reverse number range
for i in {5..0}
do
echo "Element $i"
done
La salida enumera los números en orden inverso.
La sintaxis de rango funciona ya sea que los elementos aumenten o disminuyan.
Rango con Incremento
Use la sintaxis de rango y agregue el valor de paso para recorrer el rango en intervalos.
Por ejemplo, use el siguiente código para listar números pares:
#!/bin/bash
# For loop with range increment numbers
for i in {0..10..2}
do
echo "Element $i"
done
La salida imprime cada dos dígitos del rango dado.
Alternativamente, repite de diez a cero contando hacia atrás por números pares:
#!/bin/bash
# For loop with reverse range increment numbers
for i in {10..0..2}
do
echo "Element $i"
done
Ejecute el script para imprimir todos los demás elementos del rango en orden decreciente.
Incremento de intercambio 2
para cualquier número menor que la distancia entre el rango para obtener valores para diferentes intervalos.
El comando seq
El seq
El comando genera una secuencia numérica. Analizar la secuencia en el script Bash for
bucle como un comando para generar una lista.
Por ejemplo:
#!/bin/bash
# For loop with seq command
for i in $(seq 0 2 10)
do
echo "Element $i"
done
La salida imprime cada elemento generado por seq
comando.
El seq
El comando es un comando histórico y no una forma recomendada de generar una secuencia. Los métodos integrados de llaves son preferibles y más rápidos.
Estilo C
Los scripts Bash permiten tres parámetros de estilo C for
Expresiones de control de bucle. Agregue la expresión entre paréntesis dobles de la siguiente manera:
#!/bin/bash
# For loop C-style
for (( i=0; i<=5; i++ ))
do
echo "Element $i"
done
La expresión consta de:
- El inicializador (
i=0
) determina el número donde el ciclo comienza a contar. - Condición de parada (
i<=5
) indica cuándo finaliza el bucle. - Paso (
i++
) incrementa el valor dei
hasta la condición de parada.
Separe cada condición con un punto y coma (;
). Ajuste los tres valores según sea necesario para su caso de uso.
El terminal genera cada elemento, comenzando con el valor inicializador.
El valor aumenta por la cantidad de paso, hasta la condición de parada.
Bucles infinitos
Infinito for
los bucles no tienen una condición establecida para terminar el bucle. El programa se ejecuta sin fin porque la condición final no existe o nunca se cumple.
Para generar un infinito for
bucle, agregue el siguiente código a un script de Bash:
#!/bin/bash
# Infinite for loop
for (( ; ; ))
do
echo "CTRL+C to exit"
done
Para finalizar la ejecución del script, presione CTRL +C .
Los bucles infinitos son útiles cuando un programa se ejecuta hasta que se cumple una determinada condición.
Descanso
La instrucción break finaliza el ciclo actual y ayuda a salir del for
bucle temprano. Este comportamiento permite salir del bucle antes de cumplir una condición establecida.
Para demostrarlo, agregue el siguiente código a un script de Bash:
#!/bin/bash
# Infinite for loop with break
i=0
for (( ; ; ))
do
echo "Iteration: ${i}"
(( i++ ))
if [[ i -gt 10 ]]
then
break;
fi
done
echo "Done!"
El ejemplo muestra cómo salir de un infinito for
bucle usando un break
. La instrucción if de Bash ayuda a comprobar el valor de cada entero y proporciona el break
condición. Esto finaliza el script cuando un número entero alcanza el valor diez.
Para salir de un bucle anidado y un bucle externo, use break 2
.
Continuar
El continue
El comando finaliza la iteración del bucle actual. El programa continúa el ciclo, comenzando con la siguiente iteración. Para ilustrar, agregue el siguiente código a un script de Bash para ver cómo continue
declaración funciona en un for
bucle:
#!/bin/bash
# For loop with continue statement
for i in {1..100}
do
if [[ $i%11 -ne 0 ]]
then
continue
fi
echo $i
done
El código verifica números entre uno y cien e imprime solo números divisibles por once.
El condicional if
declaración comprueba la divisibilidad, mientras que el continue
declaración omite cualquier número que tenga un resto cuando se divide por once.
Arreglos
Las matrices almacenan una lista de elementos. El for
loop proporciona un método para recorrer matrices por elemento.
Por ejemplo, defina una matriz y recorra los elementos con:
#!/bin/bash
# For loop with array
array=(1 2 3 4 5)
for i in ${array[@]}
do
echo "Element $i"
done
La salida imprime cada elemento almacenado en la matriz del primero al último.
La Fiesta for
loop es el único método para iterar a través de elementos de matriz individuales.
Índices
Cuando se trabaja con arreglos, cada elemento tiene un índice.
Lista a través de los índices de una matriz con el siguiente código:
#!/bin/bash
# For loop with array indices
array=(1 2 3 4 5)
for i in ${!array[@]}
do
echo "Array indices $i"
done
La indexación de elementos comienza en cero. Por lo tanto, el primer elemento tiene un índice cero.
La salida imprime números del cero al cuatro para una matriz con cinco elementos.
Bucles anidados
Para recorrer o generar matrices multidimensionales, utilice for
anidados bucles
Como ejemplo, genere valores decimales de cero a tres usando bucles anidados:
#!/bin/bash
# Nested for loop
for (( i = 0; i <= 2; i++ ))
do
for (( j = 0 ; j <= 9; j++ ))
do
echo -n " $i.$j "
done
echo ""
done
El código hace lo siguiente:
- Línea 1 inicia el
for
bucle en cero, se incrementa en uno y termina en dos, inclusive. - Línea 3 inicia el
for
anidado bucle en cero. El valor aumenta en uno y termina en nueve inclusive. - Línea 5 imprime los valores del
for
bucles El for anidado recorre todos los números tres veces, una vez para cada valor de bucle externo.
La salida imprime cada combinación de números en la consola e ingresa una nueva línea cuando el exterior r el bucle finaliza una iteración.
Cuerdas
Para recorrer las palabras en una cadena, almacene la cadena en una variable. Luego, analice la variable a un for
bucle como una lista.
Por ejemplo:
#!/bin/bash
# For loop with string
strings="I am a string"
for i in ${strings}
do
echo "String $i"
done
El ciclo itera a través de la cadena, siendo cada palabra un elemento separado.
La salida imprime palabras individuales de la cadena a la consola.
Archivos
El for
el bucle combinado con búsquedas de proximidad ayuda a enumerar o modificar archivos que cumplen una condición específica.
Por ejemplo, enumere todos los scripts de Bash en el directorio actual con un for
bucle:
#!/bin/bash
# For loop with files
for f in *.sh
do
echo $f
done
El script busca en el directorio actual y enumera todos los archivos con .sh extensión.
Recorra los archivos o directorios para renombrar o cambiar automáticamente los permisos de varios elementos a la vez.
Sustitución de comandos
El for
loop acepta la sustitución de comandos como una lista de elementos para iterar.
El siguiente ejemplo muestra cómo escribir un for
bucle con sustitución de comando:
#!/bin/bash
# For loop with command substitution
list=`cat list.txt`
# Alternatively, use list=$(cat list.txt)
for i in $list
do
echo $i
done
El comentario de Bash ofrece una sintaxis alternativa para la sustitución de comandos. El código lee el contenido de list.txt archivo usando el cat
comando y guarda la información en una variable list
.
Utilice el método de sustitución de comandos para cambiar el nombre de los archivos de una lista de nombres guardados en un archivo de texto.
Argumentos de línea de comando
Usa el for
loop para iterar a través de los argumentos de la línea de comandos.
El siguiente código de ejemplo muestra cómo leer argumentos de línea de comando en un for
bucle:
#!/bin/bash
# For loop expecting command line arguments
for i in [email protected]
do
echo "$i"
done
Proporcione los argumentos de la línea de comando cuando ejecute el script Bash.
Por ejemplo:
. <script name> foo bar
El [email protected]
sustituye cada argumento de línea de comando en for
bucle.
Conclusión
Después de seguir este tutorial, sabrás cómo usar el for
Bucle en scripts Bash para iterar a través de listas.
A continuación, aprenda a escribir y utilizar las funciones de Bash.