1

我根据我在 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 中?

约翰康纳

4

1 回答 1

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返回的是 Country,而不是 Country。因此,我对国家/地区的搜索不区分大小写。

于 2016-07-29T22:54:55.237 回答