2016-07-29 81 views
1

我創建基於我能找到在互聯網和一些的bash教程的腳本,這會告訴我我的外部IP,它的分佈於全國。國家和外部IP bash腳本

腳本如下像這樣:

#!/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 

輸出看起來是這樣的: 國家:荷蘭 183.64.132.80

問題是我不想使用文件來做到這一點,因爲文件結構明顯從系統變爲系統。 如何以優雅的方式製作它,以便進行檢查並存儲到變量中,然後直接顯示在shell中?

約翰·康納

回答

1

據我瞭解,你的目標是消除使用臨時文件。在這種情況下:

#!/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 

上面寫着彷彿返回多個地址爲你的IP。如果情況並非如此,那麼while循環是多餘的。

如果只期待一個IP,那麼:

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

注:

  • 我轉換IP到IP,因​​爲它是用較低的最佳做法或大小寫混合的名稱爲您的shell變量。

  • 我的whois返回一行與國家,而不是國家。所以,我對國家大小寫不敏感。

+0

John1024這正是我所需要的。你先生配有餅乾! 我需要開始學習awk和sed,現在推遲一段時間。 不能把你的投票該死的,我要低排名:( –