Temat: skrypt ash: ping + informowanie ledami

Witam,
potrzebuję skonstruować skrypt który będzie LEDem informować o wyniku polecenia ping.
Np:
jeśli ping wraca: 1sek świeci, 2sek zgaszona
jeśli NIE  wraca: 2sek świeci, 1 sek zgaszona.
Proste.

#!/bin/sh
echo "0" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness

while sleep 0; do
if [ "`ping -c 1 -w 1 8.8.8.8|grep ", 0%`" != "" ]; then
echo "255" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 1
echo "0" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 2
fi

if [ "`ping -c 1 -w 1 8.8.8.8|grep ", 0%`" == "" ]; then
echo "255" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 2
echo "0" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 1
fi

done

Na prosty rozum działać powinno. Jednak działa tylko gdy pakiet się traci lub gdy nie.

Ale jest możliwa 3cia lub 4ta odpowiedź ping: bad adress lub Network unreachable.
I w tych wypadkach (3ci - pomińmy, jest podane ip a nie domena) mimo grepa
a i tak się wyświetla w linii poleceń niechciana, nieobsługiwana treść odpowiedzi polecenia ping.
(do testów wył/zał leda zastąpiłem wyprowadzaniem tekstu na ekran - echo "jest" / echo "nie ma")

Jak się tego pozbyć nieparsowanego komunikatu, tak aby to było obsługiwane poprawnie?

tp-link mr3220
huawei K3565 (e160x)
extroot 4GiB - patriot extreme
usb active hub

2

Odp: skrypt ash: ping + informowanie ledami

Zobacz man ping i return values.
Sleep 0 szkoda wolac, daj true lub :

3

Odp: skrypt ash: ping + informowanie ledami

ping (... coś tam) 2>/dev/null

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

4

Odp: skrypt ash: ping + informowanie ledami

Moze komus tez sie przyda.
Panowie,dziekuje za naprowadzenie:)
(choc do tej pory nie rozumiem czemu nie dziala prawidlowo w openwrt:

if ["$?" == 0] ; then.....

Tu gotowiec:

#!/bin/sh
echo "0" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
while true; do
ping -c 1 -w 1 8.8.8.8 > /dev/null 2> /dev/null

case "$?" in

0)
echo "255" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 1
echo "0" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 1
;;

*)
echo "255" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
sleep 2
echo "0" > /sys/class/leds/tl-mr3x20\:green\:qss/brightness
;;

esac

sleep 1
done

Zapisac w pliku.

chmod 777 plik

Oczywistosci:
moze wymgac korekty wywolania obslugi leda. mozna podac inny ip, zmienic czas zal/wyl leda.
Jesli ma wstawac z routerem, to dodac sciezke z nazwa pliku do /etc/rc.local

tp-link mr3220
huawei K3565 (e160x)
extroot 4GiB - patriot extreme
usb active hub

5

Odp: skrypt ash: ping + informowanie ledami

bartsam napisał/a:

if ["$?" == 0] ; then.....

Bo źle to zapisane jest, spacji po 0 za dużo, = zamiast == (będzie działać to bo bashizm). W ostateczności:

A=$?
if [ "$A" = "0" ]; then
...
fi
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.