http://linux-ha.org/ для всех Ваших высоконадежных потребностей. Как песня говорит, лучшие вещи в жизни свободны.
Если это - вопрос дифференциации, если Вы соединены в Вашей Интранет или нет,
Вы могли свериться с быстрым коротким ping, или arp пытаются к известному внутреннему IP сервера.
Если IP не ответит, то Вы, вероятно, будете вне Интранет.
Могли быть небольшие незначительные сбои (как сервер, снижающийся временно).
Они могут быть позволены (Вы по ошибке переключаетесь на интернет-режим),
Или, протестированный далее с несколькими проверками (по различным внутренним ресурсам).
Это - больше комментарий к ответу mikeB, но комментарии не позволяют код, таким образом, я отправлю его как ответ:
Можно использовать что-то как grep для нахождения то, что Вы ищете, такой как
ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
if [ $? -eq 0 ]; then
echo 'IP found'
else
echo 'IP not found'
fi
Это может на самом деле быть упрощено, избавившись от теста ([псевдоним для теста) на статусе выхода, потому что, если уже проверяет статус выхода непосредственно, который является, как тест уже общается с если:
if
ifconfig | fgrep -q 'inet 192.168.1.1'
then
echo "IP Found"
else
echo "IP Not found"
fi
И можно далее упростить это при помощи поисков regex, встроенных в большинство оболочек Bourne при помощи оператора выбора:
case $(ifconfig)
in
*"inet 192.168.1.1"*)
echo "IP found"
;;
*)
echo "IP not found"
;;
esac
один (IMO, более сложный, и более подверженный отказу), метод должен настроить Вашего клиента DHCP для сохранения присвоенного IP-адреса в удобный файл где-нибудь.
например, с dhclient, можно просто отбросить сценарий в/etc/dhcp3/dhclient-enter-hooks.d/, чтобы сохранить текущий IP в файл, сказать /var/run/current-IP.txt
затем Ваши другие сценарии могут просто кошка что файл для получения текущего IP.
проблема с выполнением чего-то вроде этого состоит в том, что оно только говорит Вам, чем был Ваш IP-адрес, когда оно было в последний раз присвоено dhcp. Это на самом деле не говорит Вам, что Ваш IP-адрес теперь. они могут быть тем же, или они не могут.
ip addr show <DEVICE> | grep inet | grep -v inet6 | awk '{print $2}'
Это должно произвести Ваш IP, надо надеяться. Существует, вероятно, более изящный способ сделать это, но это сделало задание независимо от элегантности.
#!/bin/bash
address="192.168.0.1"
interface="eth0"
ip=$(ifconfig -a $interface | awk -F: '/inet/ {print $2}' | head -n 1 | awk '{print $1}')
if [ ${ip} == ${address} ]; then
#Do something
fi
grep -F
(илиfgrep
), который соответствует точным шаблонам, не regexes. – David Z 26 August 2009 в 08:50