2016-07-29 4 views
1

J'ai créé un script basé sur ce que je pouvais trouver sur l'Internet et quelques tutoriels bash, qui me montrer mon IP externe et le pays, il est situé dans.Pays et un script Bash IP externe

#

Looks Script comme ceci:

#!/bin/bash 

wanip=$(dig +short myip.opendns.com @resolver1.opendns.com); 
echo "$wanip" > /root/Documents/filewanip; 
iplist="/root/Documents/filewanip" 

while read IP;do 
whois "$IP" 
done < "$iplist" | grep "country" >geoloc 
cat geoloc filewanip 
rm filewanip geoloc 
#

sortie ressemble à ceci: pays: Hollande 183.64.132.80

#

Le problème est que je ne veux pas utiliser les fichiers pour faire cela car la structure du fichier change évidemment d'un système à l'autre. Comment puis-je le faire d'une manière élégante afin que la vérification est faite et stockée dans une variable (s), puis affichée directement dans le shell?

John Connor

Répondre

1

Si je comprends bien, votre objectif est d'éliminer l'utilisation des fichiers temporaires. Dans ce cas:

#!/bin/bash 
wanip=$(dig +short myip.opendns.com @resolver1.opendns.com); 
echo "$wanip" | while read ip; do 
    echo "$ip $(whois "$ip" | awk ' /[Cc]ountry/{print $2}')" 
done 

Ce qui précède a été écrit comme si renvoie plus d'une adresse pour votre IP. Si ce n'est pas le cas, la boucle while est superflue.

Si vous ne prévoyez une adresse IP, puis:

#!/bin/bash 
ip=$(dig +short myip.opendns.com @resolver1.opendns.com); 
echo "$ip $(whois "$ip" | awk ' /[Cc]ountry/{print $2}')" 

Notes:

  • Je me suis converti IP à IP, car il est des meilleures pratiques pour utiliser des noms minuscules ou mixtes pour votre shell variables

  • Mon whois renvoie une ligne avec le pays, pas le pays. J'ai donc fait en sorte que la recherche de cas de pays soit insensible.

+0

John1024 c'est exactement ce dont j'avais besoin. Vous, monsieur, méritez un cookie! J'ai besoin de commencer à apprendre awk et sed, en le reportant depuis un certain temps maintenant. Vous ne pouvez pas voter pour vous, je suis à faible rang :( –