Bash: получить результат из 1 цикла независимо от 2 - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть вопрос об использовании циклов в скрипте 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

И это работает, создает 500 профилей с параметрами по умолчанию IP и портов.Но затем мне нужно изменить порты по умолчанию с 1042 на один из массива с 1042 на 1237. Я пытаюсь создать еще один цикл внутри существующего, но получаю не совсем то, что я хочу.Ae для каждого из 500 профилей, применяя сначала 1042 порта, затем 1043 и так далее.И я хочу создать профиль 1 с портом 1042, профиль 2 - 1043 и так далее.Конечно, количество профилей больше количества портов от 1042 до 1237, но это нормально, порты можно повторить снова

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете попробовать что-то вроде этого:

Добавить переменную для начального порта:

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 (например), вы можете добавить его внутрь цикла сразу после того, как порт = $ ((порт + 1))следующее:

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

..., который сбросит счетчик и снова начнет увеличение порта с 1042.

...