Usando un while read
ciclo:
while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt
Questo leggerà l'ip_list.txt
file e imposta ogni riga su ip
variabile loop, quindi arricciala.
Sulla base del suggerimento di Stéphane ho aggiunto il --fail
flag per curl in modo che fallisca silenziosamente su un errore del server e il || break
in modo che esca dal giro. ipinfo.io consente 50.000 richieste API al mese per account gratuiti, quindi a seconda di quanti IP hai e della frequenza con cui prevedi di utilizzarlo, potrebbe essere un problema per te.
Per la ricerca di indirizzi IP geografici, di solito preferisco utilizzare il database geoIP di MaxMind. È più veloce, in quanto non dispone di una connessione Internet per ogni indirizzo IP, in quanto utilizza un database locale, e non ha limiti sul numero di chiamate.
Se in Debian, come prerequisito, installa i pacchetti:
sudo apt-get install geoip-bin geoip-database-extra
Quindi esegui lo script:
while read -r ip; do geoiplookup $ip | awk -F, ' /City/ { print $5 } ' \
; done < ip_list.txt > cities.txt