Verwenden von NC in einer For-Schleife zum Durchlaufen eines Arrays mit IP-Adressen - Syntaxfehler: ungültiger Arithmetikoperator

Verwenden von NC in einer For-Schleife zum Durchlaufen eines Arrays mit IP-Adressen - Syntaxfehler: ungültiger Arithmetikoperator

Ich arbeite daran, für meinen Job ein Bash-Skript zu erstellen, das ein Array von IP-Adressen durchläuft und NC verwendet, um nach offenen Ports für jede dieser IP-Adressen zu suchen. Wenn ich den NC-Befehl allein verwenden und den Befehl für jede IP-Adresse manuell eingeben würde, würde es funktionieren, aber das ist keine gute Vorgehensweise. Allerdings tritt ein Fehler auf, wenn ich ein Array mit allen darin enthaltenen IP-Adressen verwende. Hier ist ein Beispiel meines Codes (ich verwende IP-Adressen von Google und Microsoft aus Gründen der Privatsphäre):

#!/bin/bash
IP_Addresses=(
172.217.6.142
191.239.213.197
)
FILE_Name=(
"google"
"microsoft"
)
for i in "${IP_Addresses[@]}"
do
    nc -w2 -zv4 ${IP_Addresses[@]} 1-100 > "${FILE_Name[$i]}".log 2>&1
done

Der Fehler, den ich bei diesem Beispiel erhalte (das dem Beispiel ähnelt, das ich beim eigentlichen Skript erhalte), ist dieser:

./testPorts.sh: line 14: 172.217.6.142: syntax error: invalid arithmetic operator (error token is ".217.6.142")
./testPorts.sh: line 14: 191.239.213.197: syntax error: invalid arithmetic operator (error token is ".239.213.197")

Ich habe den Code in eine Datei namens testPorts.sh gepackt, sie ausführbar gemacht und vom Terminal aus ausgeführt. Und das ist das Ergebnis. Zeile 14 ist die Zeile mit dem NC-Befehl. Weiß jemand, was ich hier falsch mache, und wenn ja, wie kann ich es beheben?

Ich habe versucht, die IP-Adressen in Anführungszeichen zu setzen, aber mit demselben Fehler. Wenn die IP-Adressen im Array in Anführungszeichen gesetzt sind und/oder die Variable ${IP_Addresses[@]}in Anführungszeichen gesetzt ist, erhalte ich denselben Fehler.

Antwort1

Sie scheinen über dieIndizesder beiden Arrays - was Sie tun können mitIndirektion

#!/bin/bash
IP_Addresses=(
172.217.6.142
191.239.213.197
)
FILE_Name=(
"google"
"microsoft"
)
for i in "${!IP_Addresses[@]}"
do
    nc -w2 -zv4  "${IP_Addresses[$i]}" 1-100 > "${FILE_Name[$i]}".log 2>&1
done

Seien Sie auch konsistent hinsichtlich Ihrer Variablennamen ( FILE_Nameversus FILE_NAME) und gewöhnen Sie sich an, Variablenerweiterungen in Anführungszeichen zu setzen.

verwandte Informationen