如何控制for循环?

如何控制for循环?

假设我们有如下“for 循环”:

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

文本文件的内容是父文件夹中的文件夹名称

如果text_file包含10000个条目(即变量i),我如何告诉“for循环”在每10个“echo”之间休眠10秒。换句话说,当 for 循环读取 text_file 中的变量 i 时,如何控制 for 循环在每个特定时间段可以运行的变量数量?所以输出如下:

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

答案1

使用以下内容巴什脚本 (每 10 个“回声”之间休眠 10 秒):

test.sh是脚本的测试名称

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

用法

bash test.sh test_file

while ((++i))-i每次read -r line从输入返回一行时都会增加计数器

if (( "$i" % 10 == 0))- 检查当前行号是否i可以整除10(意味着执行流程到达接下来的 10 行)

sleep 10- 暂停脚本 10 秒

答案2

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

在职的

  • xargswith-L会一次性读取 10 行并将它们传递给sh -c命令。第一个参数被用作程序名称,我们将放置一个虚拟名称sh。然后这 10 行将sh作为“$@”可用,我们可以做任何我们想做的事情。在这里我们只是打印它们。然后我们sleep持续10秒。之后xargs将传递下一个 10 部分,并且重复此循环,直到用完 test_file 中的谎言为止。

相关内容