如何在 bash 循环时停止

如何在 bash 循环时停止
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,但它们被丢弃并且根本不使用。

相关内容