External IP (shell)

This script could be used easily with conky or whatever you want !
- Code: Select all
#!/bin/bash
#ExternalIP
#
#USAGE: ExternalIP <interface>
#
#1 hour cache-validity
TIMEVALID="3600"
#Saved IP directory
SAVEDIR="/tmp/"
#Connect timeout
CONTIMEOUT=10
[[ $# -ne 1 && $# -ne 2 ]] && echo "ERROR(1)" && exit 1
IFACE=$1
[ -e ${SAVEDIR}ip${IFACE} ] && [ ! -w ${SAVEDIR}ip${IFACE} ] && echo "ERROR(2)" && exit 2
[ $# -eq 2 ] && [ $2 = "--force" ] && rm ${SAVEDIR}ip${IFACE}
if [ `ifconfig $IFACE | grep -c "UP"` != "0" ]; then
DATENOW=`date +%s`
if [ -e ${SAVEDIR}ip${IFACE} ]; then
DATEFILE=`stat -c "%Y" ${SAVEDIR}ip${IFACE}`
else
DATEFILE=0
fi
DIFFTIME=$(($DATENOW - $DATEFILE))
if [ $DIFFTIME -le $TIMEVALID ]; then
cat ${SAVEDIR}ip${IFACE} && echo "(${DIFFTIME})"
else
EXTERNIP=`curl http://www.whatismyip.com/automation/n09230945.asp --interface $IFACE --connect-timeout $CONTIMEOUT 2> /dev/null`
if [ -z $EXTERNIP ]; then
echo "N/A"
echo -n "N/A*" > ${SAVEDIR}ip${IFACE}
else
echo "$EXTERNIP"
echo -n "$EXTERNIP*" > ${SAVEDIR}ip${IFACE}
logger -t $0 -i -p user.info "IP for interface $IFACE is $EXTERNIP."
fi
fi
else
echo "OFF"
#echo -n "OFF*" > ${SAVEDIR}ip${IFACE}
[ -e ${SAVEDIR}ip${IFACE} ] && rm ${SAVEDIR}ip${IFACE}
fi
[ -w ${SAVEDIR}ip${IFACE} ] && chmod 666 /tmp/ip* 2> /dev/null
exit 0