hay dos tipos de bucles bash for disponibles. Uno usando la palabra clave » in » con lista de valores, otro usando la sintaxis de programación en C como.
Este artículo es parte de nuestra serie de tutoriales de bash.
esto explica los dos métodos de bucle bash for, y proporciona 12 ejemplos diferentes sobre cómo usar el bucle bash for en sus scripts de shell.marque este artículo para referencia futura, ya que este es el único artículo que necesita para referirse a cómo usar bash para bucles con ejemplos.,
Método 1: Bash for Loop usando «in»y lista de valores
sintaxis:
for varname in listdo command1 command2 ..done
en la sintaxis anterior:
- for, in, do y done son palabras clave
- » list » contiene lista de valores. La lista puede ser una variable que contenga varias palabras separadas por espacios. Si falta list en la instrucción for, entonces toma el parámetro posicional que se pasó al shell.
- varname es cualquier nombre de variable Bash.
en este formulario, la instrucción for ejecuta los comandos incluidos en un cuerpo, una vez por cada elemento de la lista., Por ejemplo, si la lista de valores contiene 5 elementos, el bucle for se ejecutará un total de 5 veces, una vez por cada elemento de la lista. El elemento actual de la lista se almacenará en una variable «varname» cada vez a través del bucle. Este «varname» puede ser procesado en el cuerpo del bucle for.
Método 2: Bash for Loop usando sintaxis como c
la segunda forma del bucle for es similar al bucle for en el lenguaje de programación «C», que tiene tres expresiones (inicialización, condición y actualización).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
En el anterior bash para la sintaxis del comando,
- Antes de la primera iteración, expr1 se evalúa. Esto se usa generalmente para inicializar variables para el bucle.
- Todas las sentencias entre do y done se ejecutan repetidamente hasta que el valor de expr2 sea TRUE.
- Después de cada iteración del bucle, expr3 se evalúa. Esto se usa generalmente para incrementar un contador de bucle.
los siguientes 12 ejemplos muestran cómo bash for loops de diferentes maneras.,
valores estáticos para la lista después de la palabra clave» in «
en el siguiente ejemplo, la lista de valores (Mon, Tue, Mié, Jue y VIE) se dan directamente después de la palabra clave» in » en el bucle bash for.
precaución: la lista de valores no debe estar separada por comas (Lun, Mar, Mié, Jue, Vie). La coma se tratará como parte del valor. es decir, en lugar de «Mon», utilizará «Mon», como valor como se muestra en el ejemplo a continuación.
precaución: la lista de valores no debe estar entre comillas dobles. («Lun Mar Mie Jue Vie»)., Si encierra entre comillas dobles, se tratará como un solo valor (en lugar de 5 valores diferentes), como se muestra en el siguiente ejemplo.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
Variable para la lista después de la palabra clave» in «
en lugar de proporcionar los valores directamente en el bucle for, puede almacenar los valores en una variable y usar la variable en el bucle for después de la palabra clave» in», como se muestra en el siguiente ejemplo.
precaución: como una mejor práctica, siempre debe citar las variables bash cuando se refiere. Hay pocas excepciones a esta regla. Este es uno de ellos., Si comillas dos veces la variable en este bucle for, la lista de valores se tratará como valor único. Mucha gente cae en esta trampa. Ten cuidado y no comillas dos veces tu variable en el bucle for.
no especifique la lista; obtenerla de los parámetros posicionales
si no especifica la palabra clave » in » seguida de cualquier lista de valores en el bucle bash for, utilizará los parámetros posicionales (es decir, los argumentos que se pasan al script de shell).
Precaución: tenga cuidado si utiliza este método. No debe incluir la palabra clave » in » en el bucle for., Si deja la palabra clave » in » sin ningún valor, no utilizará el parámetro posicional como se muestra a continuación. No va a entrar en el bucle. es decir, for loop nunca se ejecutará como se muestra en el siguiente ejemplo.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Nota: Consulte nuestro artículo anterior para comprender más sobre los parámetros posicionales de bash.
Salida de comando Unix como valores de Lista después de la palabra clave» in »
puede usar la salida de cualquier comando UNIX / Linux como lista de valores para el bucle for encerrando el comando en Back-ticks ` ` como se muestra a continuación.,
Loop through files and directories in a for loop
to loop through files and directories under a specific directory, just cd to that directory, and give * in the for loop as shown below.
el siguiente ejemplo recorrerá todos los archivos y directorios bajo su directorio personal.
El uso de * en el bucle bash for es similar al globbing de archivos que usamos en la línea de comandos de linux cuando usamos el comando ls (y otros comandos).
por ejemplo, lo siguiente mostrará todos los archivos y directorios bajo su directorio personal., Este es el concepto que se utiliza en el anterior for5.sh ejemplo.
cd ~ls *
El siguiente mostrará todos los *.archivo conf que comienza con A, b, O, c O d bajo el directorio / etc.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
el mismo argumento que se usa en el comando ls anterior, se puede usar en un bucle bash for, como se muestra en el ejemplo siguiente.
salir del bucle for
Puede salir de un bucle for usando el comando ‘break’ como se muestra a continuación.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
continuar desde la parte superior del bucle for
bajo ciertas condiciones, puede ignorar el resto de los comandos en el bucle for, y continuar el bucle desde la parte superior de nuevo (para el siguiente valor en la lista), utilizando el comando continue como se muestra a continuación.
el siguiente ejemplo agrega» (fin de semana) «al Sábado y al domingo, y» (día de la semana) » al resto de los días.
Bash for loop using C program syntax
este ejemplo utiliza el 2do método de bash for loop, que es similar a la sintaxis de C for loop., El siguiente ejemplo genera 5 números aleatorios usando el bucle for de estilo C de bash.
9. Infinite Bash for loop
Cuando no proporcione el inicio, la condición y el incremento en el bucle bash C-style for, se convertirá en bucle infinito. Necesita presionar Ctrl-C para detener el bucle.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
Como dijimos anteriormente, presione Ctrl-C para salir de este ejemplo de bucle Bash infinite for.,
$ ./for9.shNumber: 1Number: 2Number: 3
usando una coma en el bucle bash C-style for
en el bucle bash C-style, además de incrementar el valor que se utiliza en la condición, también puede incrementar algún otro valor como se muestra a continuación.
en la sección inicializar y en la sección incrementar del bucle bash C-style for, puede tener varios valores separándolos con una coma, como se muestra a continuación.
el siguiente bucle for se ejecuta un total de 5 veces, utilizando la variable i. sin embargo, la variable j comienza con 5, y obtiene un incremento de 5 cada vez que se ejecuta el bucle.,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
rango de números después de la palabra clave «in»
puede recorrer el rango de números en el bucle for «in» utilizando la expansión de llaves.
el siguiente ejemplo recorre 10 veces usando los valores del 1 al 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
rango de números con incrementos después de la palabra clave «in»
el siguiente ejemplo recorre 5 veces usando los valores del 1 al 10, con un incremento de 2. es decir, comienza con 1, y sigue aumentando en 2, hasta que alcanza 10.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PD: no se olvide de marcar este artículo para su futura referencia.
Si te ha gustado este artículo, también te gustaría..
|
|