Значение не добавляется, если массив пуст - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть скрипт bash, который должен прочитать список доменов из txt-файла, найти его IP-адрес и найти его открытые порты с помощью Nmap и записать три из них в файл .csv. Вот код:

#!/usr/bin/env bash

# cache maps from IP addresses to open ports
declare -A cache

getports() {
    local ip=$1
    nmap -v -Pn -p 1-100 "$ip" -oG - \
        | awk -F '\t' '
            /Ports:/ {
                n = split($2, a, /,? /)
                printf "%s", a[2]
                for (i = 3; i <= n; ++i)
                    printf ":%s", a[i]
            }
        '
}

{
    echo 'Name,IP,Port'

    while IFS= read -r url; do
        # Read filtered dig output into array
        readarray -t ips < <(dig +short "$url")

        # Build array of open ports
        unset ports
        for ip in "${ips[@]}"; do
            ports+=("${cache["$ip"]:=$(getports "$ip")}")
        done

        # Output
        printf '%s,%s,%s\n' \
            "$url" \
            "$(IFS='-'; echo "${ips[*]}")" \
            "$(IFS='-'; echo "${ports[*]}")"
    done < URLs.txt
} > myFile.csv

Проблема в том, что иногда Nmap не возвращает никакого результата. В этом случае я хочу добавить значение None в массив ports, поэтому я добавил этот фрагмент кода перед #Output part:

if [ ${#ports[@]} -eq 0 ]; then
      ports+=("none")
fi

, но, похоже, это не так работать, и это значение не добавляется в третий столбец моего файла .csv (соответствующее поле третьего столбца становится пустым). Что не так?

1 Ответ

1 голос
/ 09 апреля 2020

Я думаю, было бы проще, если бы вы не пытались сделать так много в одном утверждении, просто напишите все if заявления.

    for ip in "${ips[@]}"; do
        if [ -z "${cache["$ip"]}" ]; then
            p=$(getports "$ip")
            ports+=("${p:=None}")
            cache["$ip"]=$p
        else 
            ports+=("${cache["$ip"]}")
        fi
    done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...