Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Below is a shell script I would really like to be able to feed a txt document of IP addresses to determine countries accessing my website.

Inside the text document, lets call it "IPlist.txt" might look something like:

123.123.123.123
111.111.111.111
222.222.22.222

Can i somehow modify the script below to call "IPlist.txt" and read out each line and feed that into the spot of the $IP variable?

#!/bin/sh
#
###
### For assistance, please visit forum.ipinfodb.com
#
# Created by Eric Gamache on 2009-05-26
# Version 1.0 by Eric Gamache -- 2009-06-04
# Version 1.1 updated by Marc-Andre Caron -- 2009-06-08 .. Added timezone
# Version 1.2 updated by Eric Gamache -- 2009-06-08 .. fix minors bugs.
# Version 1.3 updated by Marc-Andre Caron -- 2010-02-11 .. new timezone support, reduced complexity of the script.
# Version 1.4 updated by Junjie Wu -- 2012-06-03 .. added api_key and precision support, removed deprecated timezone support.
#
# This script is provided "as is", with absolutely no warranty expressed or
# implied. Any use is at your own risk. Permission to use or copy this
# script for any purpose is hereby granted without fee. Permission to
# modify the code and to distribute modified code is granted, provided
# the above notices are retained, and a notice that the code was modified
# is included with the above copyright notice.
#
###############################################
# Please supply your own API key
# You can get a free API key by registering on http://ipinfodb.com
YOUR_API_KEY=""
###############################################
####
####
####
WGET_OPTION="=-b -q --wait=3 --waitretry=2 --random-wait --limit-rate=9578 "
WGET_AGENT="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
#
ERROR=0
#
###############################################
if [ "$YOUR_API_KEY" = "" ]; then
  echo "Please edit the script to provide YOUR_API_KEY"
  exit
fi
##############
if [ "$1" = "" ]; then
  ERROR=1
else
  IP=$1
fi
##############
if [ "$2" != "" ]; then
  if [ "$2" != "json" ] && [ "$2" != "xml" ] && [ "$2" != "csv" ]; then
    ERROR=1
  fi
  TYPE="$2"
else
  ERROR=1
fi
##############
if [ "$3" != "" ]; then
  if [ "$3" != "city" ] && [ "$3" != "country" ] ; then
    ERROR=1
  fi
  PREC=$3
else
  ERROR=1
fi
###############################################

###############################################
if [ "$ERROR" != "0" ]; then
  echo " "
  echo " usage : $0 IP TYPE PRECISION"
  echo " Where IP is the IP to check"
  echo " TYPE is the output type (csv|xml|json)"
  echo " PRECISION can only be city or country (city|country)"
  echo " Big thanks to the team of IPInfoDB (http://ipinfodb.com)"
  exit
fi
###############################################
#
TST_wget=`wget > /dev/null 2>&1`
#
ErrorLevel=$?
#
if [ "$ErrorLevel" != 1 ] ; then
  echo " ----"
  echo " wget not found; please install it for proper operation."
  echo " ----"
  exit
fi
###############################################
###############################################
#######
#######
URL="http://api.ipinfodb.com/v3/ip-$PREC/?key=$YOUR_API_KEY&ip=$IP&format=$TYPE"
Info=`wget -qO- --user-agent="$WGET_AGENT" "$URL" 2>&1`
echo "$Info"

I'm sure this can be done straight forwardly. I just have a limited knowledge of grep/awk/sed/bash etc in general. I am hoping someone can come to my aid!

Cheers,

James

share|improve this question
up vote 3 down vote accepted

You don't need to modify the script at all. Just run it in a bash loop. Something like:

$ while read ip; do IP_finding_script.sh $ip csv city; done < IPlist.txt

To save the output in a file do:

$ while read ip; do IP_finding_script.sh $ip csv city; done < IPlist.txt > outfile.txt

To save the output of each input IP into a separate file :

$ while read ip; do IP_finding_script.sh $ip csv city > $ip".out"; done < IPlist.txt
share|improve this answer
1  
You are a champion mate! terdon good stuff! I knew it would be simple, just didn't know how! perfect! I'm assuming if i add " > output.txt" to the end of that I should have them saved? Thank you! – James Aug 25 '12 at 14:40
    
@James Cheers :) Yes, adding " > output.txt" will save them. Answer updated accordingly. – terdon Aug 25 '12 at 14:41
1  
Read here for the preferred ways to read a file. Short version: use input redirection with the while loop, and don't use for. – chepner Aug 25 '12 at 15:35
    
@chepner True enough, +1. Answer updated accordingly. In my defense, I did know the input file contains IPs. – terdon Aug 25 '12 at 20:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .