Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Bash i problem z pingiem  (Przeczytany 892 razy)

Offline sheliak

  • Nowy na forum
  • *
  • Wiadomości: 1
    • Zobacz profil
Bash i problem z pingiem
« dnia: 2021-12-18, 18:36:26 »
Witam
Jestem dość cienki w bash'u i nie mogę rozwiązać jednego problemu. Otóż próbuję napisać skrypt pingujący konkretny adres w pętli cały czas i w zależności od tego czy adres jest online czy nie skrypt ma uruchamiać przekaźnik bądź wyłączać

#!/bin/bash

if ping 192.168.143.50 >0; then    // nie bardzo wiem jak skonstruować warunek 
        echo 1 > /sys/class/gpio/gpio4/value
else
        echo 0 > /sys/class/gpio/gpio4/value
fi


To pewnie jest banał ale zablokowałem się  :) nie mogę ruszyć dalej, więc bardzo proszę o pomoc.

Dzięki wielkie

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2765
  • 1709
    • Zobacz profil
Odp: Bash i problem z pingiem
« Odpowiedź #1 dnia: 2021-12-22, 17:28:17 »
A po co pętla jesli moge spytac ?
Nie wystarczy raz na jakiś czas ?
Cron pozwala na ustawianie poleceń o konkretnej godzinie.
https://en.wikipedia.org/wiki/Cron
https://pl.wikipedia.org/wiki/Crontab

Edycja
Sprawdz to https://stackoverflow.com/questions/18123211/checking-host-availability-by-using-ping-in-bash-scripts/18123399#18123399
« Ostatnia zmiana: 2021-12-22, 17:37:58 wysłana przez 1709 »
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: Bash i problem z pingiem
« Odpowiedź #2 dnia: 2021-12-23, 07:31:12 »
Problemem początkujących jest to, że traktują shell jak każdy inny język programowania — a tak nie jest. Poczytaj sobie Advanced Bash-Scripting Guide. Wiele z początkowych rozdziałów ma zastosowanie do "zwykłego" sh.

W Twoim przypadku różnica polega na tym, że IF nie jest tym, czym się wydaje.

if POLECENIE
then
  # blok, gdy wykonanie POLECENIE zakończy się kodem sukcesu
else
  # blok, gdy wykonanie POLECENIE zakończy się kodem błędu
fi

Magia polega na tym, ze if nie sprawdza warunku w rozumieniu if z C/Pythona czy innego języka. If w shellach uruchamia wskazany proces potomny i jedyne co robi, to sprawdza, czy zakończył się on błędem (return w main(){} zwrócił coś innego niż 0) czy sukcesem (return w main(){} zwrócił 0),

Polecenie ping samo w sobie (poczytaj ostatnie akapity dokumentacji) zwraca w statusie informację, czy pojawiła się choć jedna odpowiedź, czy też nastąpił jakiś błąd (błędny adres, błąd routingu, całkowity brak odpowiedzi, itp).

Poczytaj sobie o poleceniu ping, jak uzyskać następujący zestaw efektów:
* Jak nic nie wyświetlać na ekranie (interesuje cię tylko wynik sukces/porażka zgłaszany jako status powrotu)
* Jak wysłać tylko konkretną liczbę pakietów (wygląda na LAN, więc powinny wystarczyć góra 2-3)
* Jak zakończyć ping wcześniej, gdy dostaniemy choć jedną pozytywną odpowiedź

Tu też twoja decyzja, czy rozdzielczość 1 minuty ci wystarczy (bo cron nie potrafi wołać częściej), czy chcesz bardziej real-time (i zrobić to w pętli z opóźnieniem między iteracjami, np 5 albo 10s)
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy