我写了下面的脚本来找到我的动态公共IP地址,并保存它变化的频率。
#!/usr/bin/env bash
ip=0
change=0
for ((count = 10000; count != 0, change == 10; count--)); do
fetch="$(dig +short myip.opendns.com @resolver1.opendns.com)"
dig +short myip.opendns.com @resolver1.opendns.com >>/home/nik/Desktop/file.txt
if [ $ip == 0 ]; then
ip=fetch
elif [ $ip != "$fetch" ]; then
change++
echo $ip
echo " changed to "
echo "$fetch"
echo " at "
echo date
else
echo ""
fi
echo "123"
sleep 13
(( count--))
done
我将文件保存为script.sh,并使用以下方法修改了它的可执行权限
chmod +x script.sh
当我在终端中单独运行dig命令(下一行)或直接运行echo命令时,它们都能顺利地将输出记录到文件中。
dig +short myip.opendns.com @resolver1.opendns.com>>/home/nik/Desktop/file.txt
但当我运行这个脚本时,它没有显示任何输出,也没有将任何东西记录到文本文件中。
你有 change=0
在文件的开头,然后依靠 change == 10
在你的for循环的条件表达式中。
我想你应该先检查一下你的代码 :-)
追踪公共IP地址变化的脚本可以从这个家伙开始。
#!/usr/bin/env bash
CURRENT_IP="$(timeout 5 dig +short myip.opendns.com @resolver1.opendns.com 2>/dev/null)"
num_changes=0
while [ 1 ]
do
NEW_IP="$(timeout 5 dig +short myip.opendns.com @resolver1.opendns.com 2>/dev/null)"
if echo "${CURRENT_IP}" | grep -q "${NEW_IP}"
then
echo "IP is the same" > /dev/null
else
let num_changes++
echo "${num_changes}: ${CURRENT_IP} -> ${NEW_IP}"
CURRENT_IP="${NEW_IP}"
fi
done
CURRENT_IP
和 NEW_IP
timeout 5 dig +short ... 2>/dev/null
2>/dev/null
作用是过滤掉错误信息num_changes
变量跟踪IP改变的次数。 示例输出。[NUM_CHANGES].[LAST ADDRESS] -> [NEW ADDRESS]: 最后一个地址] -> [新地址]。
1:75.72.13.89->;74.76.77.88 2:75.72.13.88->;74.76.77.87 3:75.72.13.87->;74.76.77.86