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