Usando un while read
bucle:
while read -r ip; do curl --fail "ipinfo.io/${ip}/city" || break; done<ip_list.txt
Esto leerá el ip_list.txt
archivo y establezca cada línea en el ip
variable de bucle, luego enróllela.
Basado en la sugerencia de Stéphane, he agregado el --fail
marca para curl por lo que fallará en silencio ante un error del servidor y el || break
para que salga del bucle. ipinfo.io permite 50 000 solicitudes de API al mes para cuentas gratuitas, por lo que, según la cantidad de direcciones IP que tenga y la frecuencia con la que planee usarlas, puede ser un problema para usted.
Para la búsqueda de direcciones IP geográficas, generalmente prefiero usar la base de datos geoIP de MaxMind. Es más rápido, ya que no tiene una conexión a Internet para cada dirección IP, ya que utiliza una base de datos local y no tiene límites en la cantidad de llamadas.
Si está en Debian, como requisito previo, instale los paquetes:
sudo apt-get install geoip-bin geoip-database-extra
Luego ejecute el script:
while read -r ip; do geoiplookup $ip | awk -F, ' /City/ { print $5 } ' \
; done < ip_list.txt > cities.txt