我根据我在INTERNET上找到的内容和一些bash教程创建了一个脚本,它将显示我的外部IP及其所在的国家/地区。
#脚本看起来像这样:
#!/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中?
John Connor
答案 0 :(得分: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
上面写的就好像dig
为您的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
会返回包含国家/地区的行,而不是国家/地区。所以,我搜索了国家不区分大小写。