Nowe posty

Autor Wątek: skrypt ping  (Przeczytany 8914 razy)

drsz

  • Gość
skrypt ping
« dnia: 2009-10-30, 17:57:20 »
Witam wszystkich,

Dopiero zaczynam swoją przygodę z bashem i jak na razie jestem zielony.
Otóż chciałem napisać skrypt, który sprawdza dostępność hosta w sieci
(jeśli jest on dostępny zwróci 1 jeśli nie 0).


...a może jest jakaś sprytna modyfikacja polecenia ping, która by problem rozwiązała
(mi się tego w manualu znaleźć nie udało) ?

herself

  • Gość
skrypt ping
« Odpowiedź #1 dnia: 2009-11-02, 11:05:20 »
Ping daje inny kod wyjścia gdy host odpowie (0) i inny gdy nie odpowie (1 lub 2).
Poczytaj o kodach wyjścia (zmienna bashowa odpowiadająca za kod wyjśćia ostatnio odpalonego programu to $?, odpal `echo $?` po pingu :-)), na pewno przydadzą Ci się jeszcze nie jeden raz.

drsz

  • Gość
skrypt ping
« Odpowiedź #2 dnia: 2009-11-03, 11:16:31 »
Dzięki za wskazówkę, jednak nie rozwiązała ona całkiem mojego problemu.
Już tłumacze o co mi chodzi.
Mam taki skrypt:

#! /bin/sh
ping -c 3 -q 192.168.1.43
echo $?
Zwraca mi on na ekran
PING 192.168.1.43 (192.168.1.43) 56(84) bytes of data.

--- 192.168.1.43 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.238/1.402/2.670/0.996 ms, pipe 2
0
ostatnia wartość 0 wskazuje na dostępność hosta.
I teraz sedno sprawy: chce, żeby pojawiła się sama wartość liczbowa bez zbędnych statystyk.
Próbowałem dodać cleara w kodzie
#! /bin/sh
ping -c 3 -q 192.168.1.43
clear
echo $?
ale tak to przekłamuje wynik, nawet w przypadku niedostępności hosta zwraca 0, czyli dostępny - bo echo $? zczytuje wykonanie cleara, nie pingu...

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt ping
« Odpowiedź #3 dnia: 2009-11-03, 13:01:46 »
Przekieruj więc wyjście do /dev/null.
ping -c 1 HOST 2>\\&1 > /dev/null
Powyższa linia przekazuje błędy (stderr=2) na standardowe wyjście (stdout=1), a to z kolei w próżnię.

Ładniej całość zapisać tak:
#!/bin/bash
if ping -c 1 HOST 2>\\&1 > /dev/null; then
  echo host dostepny
else
  echo host niedostepny
fi

drsz

  • Gość
skrypt ping
« Odpowiedź #4 dnia: 2009-11-03, 18:27:00 »
Wielkie dzięki :)