сценарий оболочки для поиска динамического c publi c IP-адреса в Ubuntu не показывает никакого вывода - PullRequest
0 голосов
/ 02 мая 2020

Я написал следующий скрипт, чтобы найти свой динамический c publi c 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

Я сохранил файл как скрипт. sh и изменил его исполняемый файл разрешения с использованием

chmod +x script.sh

Когда я независимо запускаю команду dig (в следующей строке) или команду echo непосредственно в терминале, они записывают вывод в файл без проблем

 dig +short myip.opendns.com @resolver1.opendns.com>>/home/nik/Desktop/file.txt

, но когда я запускаю сценарий, он не показывает выходных данных и ничего не записывает в текстовый файл. Я использую Ubuntu 19.10, если это имеет значение. Изменить: добавил Шебанг и изменил ожидания, чтобы спать

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Хорошее место для начала со скриптом, который отслеживает публичные c изменения 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]: [ПОСЛЕДНИЙ АДРЕС] -> [НОВЫЙ АДРЕС]

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

0 голосов
/ 02 мая 2020

У вас есть change=0 в начале вашего файла, а затем зависит от change == 10 в условном выражении вашего для l oop.

Я думаю, вы должны сначала просмотреть свой код: - )

...