¿Cómo controlar el bucle?

¿Cómo controlar el bucle?

Digamos que tenemos "bucle for" de la siguiente manera:

#!/bin/bash
for i in $(cat test_file); do 
echo $i
done

El contenido del archivo de texto son los nombres de las carpetas en una carpeta principal.

Si el archivo de texto contiene 10000 entradas (es decir, la variable i), ¿cómo puedo decirle al "bucle for" que duerma 10 segundos entre cada 10 "ecos"? En otras palabras, cuando el bucle for lee la variable i en el archivo de texto, ¿cómo puedo controlar la cantidad de variables que el bucle for puede ejecutar en cada período de tiempo específico? Entonces el resultado es el siguiente:

   Variable #1
   Variable #2
   Variable #3
   .
   .
   .
   .
   sleep 10
    Variable #11
    Variable #12
    Variable #13
   .
   .       .

Respuesta1

Utilice lo siguienteintentoguion (dormir 10 segundos entre cada 10 "ecos"):

test.shes un nombre de prueba del script

#!/bin/bash
while ((++i)); read -r line
do
    echo "$line"
    if (( "$i" % 10 == 0)) 
    then
        sleep 10
    fi
done < $1

Uso:

bash test.sh test_file

while ((++i))- incrementará iel contador cada vez que read -r linedevuelva una línea de la entrada

if (( "$i" % 10 == 0))- comprueba si el número de línea actual ies divisible por 10(significa que el flujo de ejecución llega a las siguientes 10 líneas)

sleep 10- pausa el guión durante 10 segundos

Respuesta2

xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file

Laboral

  • xargswith -Ltomará 10 líneas de una vez y las pasará al sh -ccomando. Allí se consume el primer argumento como nombre del programa, colocaremos un nombre ficticio sh. Entonces estas 10 líneas estarán disponibles shcomo "$@" y podremos hacer lo que queramos. Aquí simplemente los imprimimos. Luego lo hacemos sleepdurante 10 segundos. Después de eso, xargspasará a los siguientes 10 tramos y este ciclo se repetirá hasta que se acaben las mentiras en test_file.

información relacionada