web-dev-qa-db-fra.com

Utilisation de NC dans une boucle for pour parcourir un tableau avec des adresses IP - Erreur de syntaxe: Opérateur arithmétique invalide

Je travaille actuellement sur la création d'un script Bash pour mon travail, qui effectue une itération sur un tableau d'adresses IP et utilise NC pour rechercher les ports ouverts sur chacune de ces adresses IP. Si je devais utiliser la commande CN seule et taper manuellement la commande pour chaque adresse IP, alors cela fonctionnerait, mais ce n'est pas un bon moyen de le faire. Cependant, je rencontre une erreur lorsque j'utilise un tableau avec toutes les adresses IP qu'il contient. Voici un exemple de mon code (en utilisant les adresses IP de Google et de Microsoft pour des exemples et la confidentialité):

#!/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

L'erreur que je reçois de cet exemple (qui est similaire à celle du script réel) est la suivante:

./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")

J'avais mis le code dans un fichier appelé testPorts.sh, je l'avais rendu exécutable et je l'avais exécuté à partir du terminal. Et c'est ce que j'ai eu. La ligne 14 est la ligne avec la commande CN. Est-ce que quelqu'un sait ce que je fais mal ici, et si oui, comment puis-je résoudre le problème?

J'ai essayé de mettre les adresses IP entre guillemets, mais avec la même erreur. Si les adresses IP du tableau sont entourées de guillemets et/ou si la variable ${IP_Addresses[@]} est entourée de guillemets, j'obtiens la même erreur.

1
Christian Sirolli

Vous semblez vouloir parcourir le indices des deux tableaux - ce que vous pouvez faire avec indirection

#!/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

Veillez également à la cohérence de vos noms de variables (FILE_Name par rapport à FILE_NAME) et prenez l’habitude de citer des développements de variables.

1
steeldriver