![如何在 bash 循环时停止](https://linux22.com/image/204315/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E5%BE%AA%E7%8E%AF%E6%97%B6%E5%81%9C%E6%AD%A2.png)
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时停止发送请求。
我该如何编写代码?谢谢
答案1
如果你想要实现的是curl
总共调用15000次,那么你需要做的就是运行你的外循环1500次。
您可以通过简单地运行外循环 1500 次来实现这一点,其方式与运行内循环 10 次类似:
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
和创建了 15000 行,head
并将它们输入到一个xargs
命令中,该命令将保持 10 个curl
进程随时运行,直到所有行都被耗尽(curl
从 读取的每一行都会生成一个进程head
)。生成的行的实际内容yes
将是单个字符y
,但它们被丢弃并且根本不使用。