shell 用于在 ubuntu 中查找动态 public ip 地址的脚本不显示任何输出

shell script to find dynamic public ip address in ubuntu does not show any output

我编写了以下脚本来查找我的动态 public 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

但是当我 运行 脚本时,它没有显示任何输出,也没有将任何内容记录到文本文件中。 如果重要的话,我使用 Ubuntu 19.10。 编辑:添加了 shebang 并更改了 wait to sleep

你的文件开头有change=0,然后在你的for循环的条件表达式中依赖change == 10

我认为你应该先检查你的代码:-)

从跟踪 public 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_IPNEW_IP
  • 它们的更新方式相同timeout 5 dig +short ... 2>/dev/null
  • 超时用于确保我们的脚本永远不会挂起
  • 2>/dev/null 用于过滤错误消息
  • num_changes 变量跟踪 IP 更改的次数
  • 此脚本唯一会打印任何消息的时间是您的地址更改时

示例输出:[NUM_CHANGES]:[最后地址] -> [新地址]

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