GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Script for Loop explicado con ejemplos

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 de i 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.

Nota: Aprenda a usar el comando cat y el bucle for para leer archivos línea por línea en Bash.

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.


Linux
  1. Cómo escribir un script Bash con ejemplos

  2. Bash For Loop Guía y ejemplos

  3. Comando de desexpansión de Linux explicado para principiantes (con ejemplos)

  4. Ejemplos de ciclos for y while de Bash

  5. Bash para ejemplos de bucle

Bash Scripting - Funciones explicadas con ejemplos

Bash Scripting - Variables explicadas con ejemplos

Bash Scripting - Comando Printf explicado con ejemplos

Bash Scripting:matriz asociativa explicada con ejemplos

Bash For Loops con ejemplos

El Bash FOR Loop explicado y simplificado