Todo lo que necesita saber sobre Bash for Loops en Linux

Todo lo que necesita saber sobre Bash for Loops en Linux

Los scripts de bash son un medio altamente eficiente de automatizar tareas, particularmente aquellas que aprovechan otros programas existentes. Esta automatización a menudo requiere repetir una operación similar varias veces, que es precisamente donde en bucle entra en juego.





Los administradores de sistemas Linux y Mac suelen estar familiarizados con las secuencias de comandos a través de la terminal, pero incluso los usuarios de Windows pueden entra en acción con el subsistema de Windows para Linux .





Cómo funcionan los scripts de Bash

Un script bash es simplemente un archivo de texto sin formato que contiene una serie de comandos que el shell bash puede leer y ejecutar. Bash es el shell predeterminado en macOS anteriores a Catalina y en la mayoría de las distribuciones de Linux.





Si nunca antes ha trabajado con un script de shell, debe comenzar con el caso más simple. Esto le permitirá practicar conceptos clave, incluida la creación del script y su ejecución.

Primero, cree el siguiente archivo en una ubicación conveniente (idealmente, abra una terminal y navegue al directorio deseado primero):



|_+_|

La primera línea le dice a todo lo que ejecute este programa cómo ejecutarlo (es decir, usando el intérprete de bash). El segundo es solo un comando como cualquier otro que pueda ingresar en la línea de comando. Guarde ese archivo como hello_world.sh , luego:

|_+_|

los chmod El comando en la primera línea hace que el archivo sea ejecutable, lo que significa que se puede ejecutar escribiendo su nombre, como en la segunda línea.





Si ve que las palabras Hola, mundo aparecen impresas en una línea en su terminal, entonces todo está funcionando como se requiere.

Cómo funcionan los bucles For

En la programación general, hay dos tipos principales de bucle for: numérico y para cada . El tipo numérico es tradicionalmente el más común, pero en el uso de bash suele ser al revés.





Los bucles for numéricos suelen centrarse en un único entero que determina cuántas iteraciones se llevarán a cabo, por ejemplo:

|_+_|

Este es un bucle for de apariencia familiar que iterará exactamente 100 veces, a menos que i se modifique dentro del bucle, u otra declaración haga que se detenga la ejecución del bucle for.

Los bucles Foreach, por el contrario, tienden a operar en estructuras como listas o matrices, e iteran para cada elemento dentro de esa colección:

|_+_|

Algunos lenguajes usan una sintaxis ligeramente diferente que cambia el orden de colección y artículo:

|_+_|

Para en bucles

En bash, el foreach o por en —El bucle es más común. La sintaxis básica es, simplemente:

|_+_|

Por ejemplo, para recorrer en iteración tres archivos con nombres explícitos:

active 2 vs galaxy watch 3
|_+_|

Si tales archivos existen en el directorio actual, la salida de este script será:

|_+_|

En lugar de un conjunto fijo de archivos, la lista se puede obtener mediante un patrón global (uno que incluye comodines, caracteres especiales que representan otros caracteres). En el siguiente ejemplo, el bucle for itera en todos los archivos (en el directorio actual) cuyos nombres terminan en '.xml':

|_+_|

A continuación, se muestra un resultado de ejemplo:

|_+_|

Esto puede parecerse mucho a una forma larga de hacer:

|_+_|

Pero hay una diferencia significativa: el bucle for ejecuta el ls programe 2 veces distintas, con un solo nombre de archivo cada vez. En el ejemplo de ls separado, el patrón glob (* .xml) primero coincide con los nombres de archivo y luego los envía todos, como parámetros de línea de comandos individuales, a una instancia de ls .

A continuación, se muestra un ejemplo que utiliza la WC (recuento de palabras) programa para hacer la diferencia más obvia:

|_+_|

los WC El programa cuenta el número de líneas en cada archivo por separado, luego imprime un recuento total en todos ellos. Por el contrario, si WC opera dentro de un bucle for:

|_+_|

Seguirá viendo el recuento de cada archivo:

|_+_|

Pero no hay un total de resumen general porque WC se ejecuta de forma aislada, cada vez que el bucle se repite.

Cuando una lista no es una lista

Hay un error muy fácil y común cuando se trata de bucles for, debido a la forma en que bash maneja los argumentos / cadenas entre comillas. Recorrer una lista de archivos debe hacerse así:

|_+_|

Así no:

|_+_|

El segundo ejemplo incluye los nombres de archivo entre comillas dobles, lo que da como resultado una lista con un solo parámetro; el bucle for solo se ejecutará una vez. Este problema se puede evitar utilizando una variable en tales casos:

|_+_|

Tenga en cuenta que la declaración de la variable en sí necesita incluir su valor entre comillas dobles.

que tipo de planta es esta

Por sin una lista

Sin nada para iterar, un bucle for opera en los argumentos de la línea de comandos que se proporcionaron al script cuando se invoca. Por ejemplo, si tiene un script llamado args.sh que contiene lo siguiente:

|_+_|

Luego, ejecutar args.sh le dará lo siguiente:

|_+_|

Bash reconoce este caso y trata para hacer como el equivalente de por un en $ @ hacer donde $ @ es una variable especial que representa los argumentos de la línea de comandos.

Emulación de un bucle for numérico tradicional

Los scripts Bash a menudo tratan con listas de archivos o líneas de salida de otros comandos, por lo que el tipo de bucle for in es común. Sin embargo, la operación tradicional de estilo C todavía es compatible:

|_+_|

Esta es la forma clásica con tres partes en las que:

  1. una variable se inicializa (i = 1) cuando el bucle se encuentra por primera vez
  2. el bucle continúa mientras la condición (i<=5) is true
  3. cada vez alrededor del ciclo, la variable se incrementa (i ++)

Iterar entre dos valores es un requisito lo suficientemente común como para que exista una alternativa más corta y un poco menos confusa:

|_+_|

La expansión de la abrazadera que se lleva a cabo traduce efectivamente el bucle for anterior en:

|_+_|

Control de bucle más fino con interrupción y continuación

Los bucles for más complejos a menudo necesitan una forma de salir temprano o reiniciar inmediatamente el bucle principal con el siguiente valor sucesivamente. Para hacerlo, bash toma prestadas las declaraciones break y continue que son comunes en otros lenguajes de programación. A continuación, se muestra un ejemplo que utiliza ambos para encontrar el primer archivo que tiene más de 100 caracteres:

|_+_|

El ciclo for aquí opera en todos los archivos del directorio actual. Si el archivo no es un archivo normal (por ejemplo, si es un directorio), la instrucción continue se usa para reiniciar el ciclo con el siguiente archivo sucesivamente. Si es un archivo normal, el segundo bloque condicional determinará si contiene más de 100 caracteres. Si es así, la instrucción break se usa para dejar inmediatamente el bucle for (y llegar al final del script).

Conclusión

Un script bash es un archivo que contiene un conjunto de instrucciones que se pueden ejecutar. Un bucle for permite que parte de un script se repita muchas veces. Con el uso de variables, comandos externos y las sentencias break y continue, los scripts bash pueden aplicar una lógica más compleja y realizar una amplia gama de tareas.

Cuota Cuota Pío Correo electrónico ¿Vale la pena actualizar a Windows 11?

Windows ha sido rediseñado. Pero, ¿es eso suficiente para convencerte de cambiar de Windows 10 a Windows 11?

Leer siguiente
Temas relacionados
  • Programación
  • Linux
Sobre el Autor Bobby Jack(58 Artículos publicados)

Bobby es un entusiasta de la tecnología que trabajó como desarrollador de software durante la mayor parte de dos décadas. Le apasionan los juegos, trabaja como editor de reseñas en Switch Player Magazine y está inmerso en todos los aspectos de la publicación en línea y el desarrollo web.

Más de Bobby Jack

Suscríbete a nuestro boletín

¡Únase a nuestro boletín de noticias para obtener consejos técnicos, reseñas, libros electrónicos gratuitos y ofertas exclusivas!

Haga clic aquí para suscribirse