Bash:从独立于 2 的 1 循环中获取结果

Bash: get result from 1 loop independent from 2

我对在 bash 脚本中使用循环有一些疑问。我需要发送多个具有不同值的 POST 请求。所以我使用了循环。 在 1 个循环中,我更改了配置文件的名称,只需将数字从 1 添加到 500

#!/bin/bash
token="Authorization: Bearer h-bCxY3nCJD_Oro_aQE15soo-XFewv1bzsArbd46iJrH1t5Fxa3TLYaQ3Q"
url="http://ad44fcfa01aad11e98c201.amazonaws.com/api/v0.1/scanprofiles"
q=500

name=3_Ubuntu_internal

for ((i = 0; i < q; i++))
 do
    data='{"target":{"scan_type":"internal","ip_range":"10.142.0.2-10.142.0.5","ports":"1042"},"name":"'$name$i'","run_immediately":"False"}'
    echo "${data}"
    curl -X POST $url -H 'Content-Type: application/json' -H "$token" -d "$data"
 done

它起作用了,使用默认的 IP 和端口参数创建了 500 个配置文件。但是后来我需要将默认端口从 1042 更改为数组中的一个,从 1042 到 1237。我尝试在现有的内部创建另一个循环,但得到的结果并不完全是我想要的。 A.e。对于 500 个配置文件中的每一个,首先应用 1042 端口,然后是 1043 端口,依此类推。我想创建具有 1042 端口的配置文件 1、配置文件 2 - 1043 等等。当然配置文件的数量更多的端口数量从 1042 到 1237 但没关系,端口可以再次重复

您可以尝试这样的操作:

为起始端口添加一个变量:

port=1042

并在循环内递增它:

for ((i = 0; i < q; i++))
 do
    data='{"target":{"scan_type":"internal","ip_range":"10.142.0.2-10.142.0.5","ports":"'${port}'"},"name":"'$name$i'","run_immediately":"False"}'
    echo "${data}"
    curl -X POST $url -H 'Content-Type: application/json' -H "$token" -d "$data"
    port=$((port+1))
 done

这样每个下一个端口都将是前一个端口的增量。

如果您不能通过端口 1237(例如),您可以在 port=$((port+1)) 之后的循环中添加以下 if:

if [ "${port}" -eq "1237" ];then
    port=1042
fi

...这将重置计数器并再次从 1042 开始端口递增。