newcomers Asked: 2022-04-03 02:08:23 +0800 CST2022-04-03 02:08:23 +0800 CST 2022-04-03 02:08:23 +0800 CST 如何在循环bash时停止 772 target=${1:-http://web1.com} while true do for i in $(seq 10) do curl $target > /dev/null & done wait done 我只是编写编程尤其是 bash 的初学者。我想通过一次发出 10 个 HTTP 请求来训练我的 HTTP 负载平衡。并在达到 15000 时停止发送请求。 我该如何编写代码?谢谢你 bash for 1 个回答 Voted Best Answer Kusalananda 2022-04-03T02:23:47+08:002022-04-03T02:23:47+08:00 如果你想要实现的是curl总共调用15000次,那么你需要做的就是运行你的外循环1500次。 你可以通过简单地运行外循环 1500 次来做到这一点,就像你运行内循环十次一样: target=${1:-http://web1.com} j=0 while [ "$j" -lt 1500 ]; do for i in {0..9}; do curl "$target" >/dev/null & done wait j=$(( j + 1 )) done 或者你可以计算你调用的总次数curl,这将允许你改变你curl在内部循环中运行的次数,而无需调整外部循环,并且仍然保持相同的总调用次数: target=${1:-http://web1.com} n=15000 while [ "$n" -gt 0 ]; do for i in {0..9}; do curl "$target" >/dev/null & n=$(( n - 1 )) done wait done 只要严格大于零,测试[ "$n" -gt 0 ]就为真。n 或者,为了避免n在内循环内部减少: target=${1:-http://web1.com} n=15000 while [ "$n" -gt 0 ]; do for i in {0..9}; do curl "$target" >/dev/null & done n=$(( n - 10 )) wait done 或者,您有一个xargs可以与 并行运行的实用程序-P,并且您希望保持 10 个curl进程不断运行: target=${1:-http://web1.com} n=15000 yes | head -n "$n" | xargs -I {} -P 10 curl "$target" >/dev/null yes这将使用and创建 15000 行,head并将它们输入一个xargs命令,该命令将随时保持 10 个curl进程运行,直到所有行都用完(curl从 读取的每一行将生成一个进程head)。生成的行的实际内容yes将是单个字符y,但是这些被丢弃并且根本不使用。
如果你想要实现的是
curl
总共调用15000次,那么你需要做的就是运行你的外循环1500次。你可以通过简单地运行外循环 1500 次来做到这一点,就像你运行内循环十次一样:
或者你可以计算你调用的总次数
curl
,这将允许你改变你curl
在内部循环中运行的次数,而无需调整外部循环,并且仍然保持相同的总调用次数:只要严格大于零,测试
[ "$n" -gt 0 ]
就为真。n
或者,为了避免
n
在内循环内部减少:或者,您有一个
xargs
可以与 并行运行的实用程序-P
,并且您希望保持 10 个curl
进程不断运行:yes
这将使用and创建 15000 行,head
并将它们输入一个xargs
命令,该命令将随时保持 10 个curl
进程运行,直到所有行都用完(curl
从 读取的每一行将生成一个进程head
)。生成的行的实际内容yes
将是单个字符y
,但是这些被丢弃并且根本不使用。