2014-02-13 2 views
0

Я написал Баш скрипт:Bash скрипт для проверки состояния сети - Linux

RRR=$(ifconfig eth0 | grep 'inet addr:' | cut -d: -f2) 
if [[ ${RRR} == null ]]; then 
`zenity --error --text "NO NETWORK"` 
else 
`zenity --error --text "NETWORK IS ON"` 
fi 

, но он не работает нормально - когда я отрезан сети сообщение об ошибке не отображается на

любой предложения?

спасибо вперед

+0

Shell обычно несколько синтаксис, в отличие от C/Java. '== null' не работает так, как вы ожидали. См. 'Help [['. Не уверен, чего вы пытаетесь достичь, но говоря: '[[-z $ {RRR}]]' может работать для вас. – devnull

+0

Обычно я использую команду ping (например, ping myhost.com -c3), чтобы проверить, доступен ли хост. Затем вы можете использовать статус выхода ping (успех = 0) для дальнейшей оценки. – Robert

+0

'когда я отключил сеть, сообщение об ошибке не отображается на' почему оно должно ВКЛЮЧЕНО –

ответ

1

Я думаю, пинг помочь вам как альтернатива Но вы уже решили, что интересно всплывающее окно с сообщением со статусом сети.

ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo "NETWORK IS ON" || echo "NO NETWORK" 

или

ROUTER_IP="your router ip" 
    (! ping -c1 $ROUTER_IP >/dev/null 2>&1) && service network restart >/dev/null 2>&1 
0

попробовать это:

find /proc/irq/ -name \*eth0\* | fgrep -q eth0 && echo up || echo down 

если загружен интерфейс будет появляться

[email protected]:/proc# ifconfig eth0 down 
[email protected]:/proc# find /proc/irq/ -name \*eth0\* | fgrep -q eth0 && echo up || echo down 
down 
[email protected]:/proc# ifconfig eth0 up 
[email protected]:/proc# find /proc/irq/ -name \*eth0\* | fgrep -q eth0 && echo up || echo down 
up 

Я не знаю, если это будет refear к linkstate ... но использование/proc всегда быстрее

0

Вы можете использовать команду ping для анализа качества соединения. Я использую эту функцию для тестирования текущего интерфейса в Linux. Это адрес назначения ping 10 раз и возвращает 0 - если это удается, 1- в противном случае. Это просто одна из возможностей.

param1 - имя интерфейса (eth0, tun0 ...); param2 - ping destination

ping_interface() { 
    # Max value of losted packages in % 
    MAX_PACKETS_LOST=80 
    PACKETS_COUNT=10 
    PACKETS_LOST=$(ping -c $PACKETS_COUNT -I $1 $2 |grep % | awk '{print $7}') 
    if ! [ -n "$PACKETS_LOST" ] || [ "$PACKETS_LOST" == "100%" ]; 
    then 
     # 100% failed 
     return 1 
    else 
     if [ "${PACKETS_LOST}" == "0%" ]; 
     then 
      #ping is OK 
      return 0 
     else 
      # Real value of losted packets between 0 and 100% 
      REAL_PACKETS_LOST=$(echo $PACKETS_LOST | sed 's/.$//') 
      if [[ ${REAL_PACKETS_LOST} -gt ${MAX_PACKETS_LOST} ]]; 
      then 
       echo "Failed. Lost more then limit" 
       return 1 
      else 
       echo "Connection is ok." 
       return 0 
      fi 
     fi 
    fi 
} 

ping_interface eth0 8.8.8.8 
+0

Вы также можете проверить правильность и правильность eth0 с помощью команды ifconfig. Например: «ifconfig eth0 | grep RUNNING» – Denis

Смежные вопросы