Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Сравнение двух IP в Bash  (Прочитано 3077 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ExIM

  • Автор темы
  • Новичок
  • *
  • Сообщений: 31
  • Ubuntu 13.10
    • Просмотр профиля
    • я ВКонтакте
Сравнение двух IP в Bash
« : 03 Апреля 2014, 21:14:58 »
Всем привет!
Второй день осваивания Bash, и все никак не выходит сравнить два IP.
Вот часть кода:
NEW_IP=`ifconfig | awk '/inet addr/ && !/127/ { sub(/addr:/, ""); print $2}' -`
if [[$OLD_IP -ne $NEW_IP]]; then
echo "Всё нормально, адреса различаются!";
else echo "Внимание! Новый и старый IP адреса совпадают!"
echo "Повторно пытаемся получить новый IP:"
sudo dhclient $INT & sleep 60s && kill $! 2>/dev/null && echo "Убиваем DHCP Client"
fi
В переменные OLD_IP и NEW_IP записываются IP адреса, и когда дело в скрипте доходит до их сравнения, вываливается ошибка типа "192.168... команда не найдена." и сравнить ничего не получается.
Получается эти IP адреса принимаются системой как команда. Как можно исправить ситуацию?

Оффлайн Виталий Голованов

  • Новичок
  • *
  • Сообщений: 19
  • Я мненью общества вращенье придавал и стержнем был
    • Просмотр профиля
Re: Сравнение двух IP в Bash
« Ответ #1 : 03 Апреля 2014, 21:46:07 »
попробуйте взять каждую переменную "в кавычки"
Толпа не любит одиночек;она признает только фальшивых людей,подражающих во всем друг другу. © Ошо

Оффлайн ExIM

  • Автор темы
  • Новичок
  • *
  • Сообщений: 31
  • Ubuntu 13.10
    • Просмотр профиля
    • я ВКонтакте
Re: Сравнение двух IP в Bash
« Ответ #2 : 04 Апреля 2014, 12:22:51 »
попробуйте взять каждую переменную "в кавычки"
Попробовал
if [ "$OLD_IP" -ne "$NEW_IP" ]; then
Теперь вываливается ошибка:
Цитировать
./script.sh: строка 30: [: 12.34.156.78
192.168.1.1: ожидается числовое выражение
Как bash'у объяснить что это не нужно рассматривать как число? Что строки либо совпадют, либо нет.

Оффлайн golota

  • Участник
  • *
  • Сообщений: 132
    • Просмотр профиля
Re: Сравнение двух IP в Bash
« Ответ #3 : 04 Апреля 2014, 12:58:14 »
Как bash'у объяснить что это не нужно рассматривать как число? Что строки либо совпадют, либо нет.
if [ "$OLD_IP" != "$NEW_IP" ]; then
Я знаю то, что ничего не знаю, но некоторые не знают и этого. Сократ

Оффлайн ExIM

  • Автор темы
  • Новичок
  • *
  • Сообщений: 31
  • Ubuntu 13.10
    • Просмотр профиля
    • я ВКонтакте
Re: Сравнение двух IP в Bash
« Ответ #4 : 04 Апреля 2014, 14:08:14 »
Понял в чем ошибка была:
Я работал с переменной NEW_IP, а она выполнялась как неизвестная команда.
Помогло введение новой переменной n_ip как показано ниже, с ней и работаю теперь.
NEW_IP=`ifconfig | awk '/inet addr/ && !/127/ { sub(/addr:/, ""); print $2}' -`
n_ip=$(echo $?)

while [ "$o_ip" == "$n_ip" ]...

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Сравнение двух IP в Bash
« Ответ #5 : 04 Апреля 2014, 17:47:48 »
echo $? показывает удачность выполнения предыдущей команды (обычно 0-удачно или 1-ошибка), причем здесь проверка адресов?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн Виталий Голованов

  • Новичок
  • *
  • Сообщений: 19
  • Я мненью общества вращенье придавал и стержнем был
    • Просмотр профиля
Re: Сравнение двух IP в Bash
« Ответ #6 : 05 Апреля 2014, 11:35:17 »
попробуйте взять каждую переменную "в кавычки"
Попробовал
if [ "$OLD_IP" -ne "$NEW_IP" ]; then
Теперь вываливается ошибка:
Цитировать
./script.sh: строка 30: [: 12.34.156.78
192.168.1.1: ожидается числовое выражение
Как bash'у объяснить что это не нужно рассматривать как число? Что строки либо совпадют, либо нет.

Странно... Вот работающий пример:

v1=1
v2="1.1.1.1"

if [ "$v1" != "$v2" ]; then
        echo -e "\n\nv1 != v2\n\n"
else
        echo -e "\n\nv1 == v2\n\n"
fi

Все прекрасно выводится...




Поиграйтесь со значениями переменных, все прекрасно работает
« Последнее редактирование: 05 Апреля 2014, 11:38:23 от Виталий Голованов »
Толпа не любит одиночек;она признает только фальшивых людей,подражающих во всем друг другу. © Ошо

 

Страница сгенерирована за 0.033 секунд. Запросов: 25.