Utiliser un while read
boucle :
while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt
Cela lira le ip_list.txt
fichier et définissez chaque ligne sur le ip
variable de boucle, puis bouclez-la.
Sur la base de la suggestion de Stéphane, j'ai ajouté le --fail
flag pour boucler afin qu'il échoue silencieusement en cas d'erreur de serveur et le || break
pour qu'il sorte de la boucle. ipinfo.io autorise 50 000 demandes d'API par mois pour les comptes gratuits, donc en fonction du nombre d'adresses IP que vous possédez et de la fréquence à laquelle vous prévoyez de l'utiliser, cela peut être un problème pour vous.
Pour la recherche d'adresses IP géographiques, je préfère généralement utiliser la base de données geoIP de MaxMind. Il est plus rapide, car il n'a pas de connexion Internet pour chaque adresse IP, car il utilise une base de données locale et n'a pas de limite sur le nombre d'appels.
Si dans Debian, en pré-requis, installez les packages :
sudo apt-get install geoip-bin geoip-database-extra
Exécutez ensuite le script :
while read -r ip; do geoiplookup $ip | awk -F, ' /City/ { print $5 } ' \
; done < ip_list.txt > cities.txt