Programowanie > Bash, skrypty powłoki

Szukam pomocy w napisaniu skryptu do przełączania tras

(1/3) > >>

zuskrus01:
Witam

Chciałbym napisać skrypt który będzie pingował jakiś określony host w sieci, i gdy ping-u nie będzie wykona inny skrypt  oraz zrobi zapis do zmiennej.
Rozpisałem sobie mniej więcej założenia które chciałbym aby skrypt spełnił i wygląda to tak

--- Kod: ---
1. Monitorowanie adresu IP
2. Przypadku braku odpowiedzi na ping :
2a - Wysyła sms/email
2b - Uruchamia inny skrypt który zmienia trasę
2c - Robi wpis np do jakiegoś pliku lub zmiennej, że nie działa
3. W przypadku braku odpowiedzi na ping, i zmiennej że nie działa nie robi nic
4. W przypadku powrotu pingu, ale zmiennej że nie działa nie robi nic
5. Skrypt opiera się na w/w zmiennej i podejmuje  działanie(zmianę trasy poprzez wykonanie innego skryptu) tylko wtedy, gdy zmienna jest np działa
Inny skrypt podczas zmiany trasy z zapasowej na domyślą będzie miał robić zmianę tej zmiennej z nie działa na działa
--- Koniec kodu ---

Od czego powinienem zacząć?

Pozdrawiam

1709:
Napisz jakikolwiek skrypt, bo na razie nie wiadomo w czym masz problem.
Dodatkowo większość odpowiedzi masz w internecie. " linux pytanie "
Kwestia czasu by znaleźć.

Np.

--- Kod: ---
#!/bin/bash


IP="192.168.0.77"
LOSS=$(ping -c 1 "$IP" | grep -oP '\d+(?=% packet loss)')


if [[ "$LOSS" == "0" ]]; then
    echo "${LOSS}"
    echo "IP odpowiedzial"
elif [[ "$LOSS" == "" ]] ; then
    echo "Bledny adres IP"
else
    echo "$LOSS"
    echo "Nie przyszla odpowiedz od $IP"
    logger -p news.alert "Nie przyszla odpowiedz od $IP"
    echo "Sprawdzamy syslog:"
    grep "Nie przyszla odpowiedz od $IP" /var/log/syslog
    echo "Sprawdzamy journalctl:"
    journalctl -b0 | grep  "Nie przyszla odpowiedz od $IP"
fi
--- Koniec kodu ---

zuskrus01:
Dzięki za odpowiedz

Wiem, dużo rzeczy jest w internecie i pewnie są tez odpowiedzi, tylko nie do końca wiem czego szukać,
np. zapis do zmiennej. Zrobić to na zasadzie zapisu do pliku " działa" albo "nie działa" ?

1709:
" zapis do zmiennej "
--> linux bash zapis do zmiennej
https://duckduckgo.com/?q=linux+bash+zapis+do+zmiennej&t=lm&ia=web
Czyli znajdziesz to w kursach bash
-->  linux bash save to variable
https://duckduckgo.com/?q=linux+bash+save+to+variable&t=lm&ia=web
Znajdziesz to także w odpowiedziach np. na stackoverflow.com , unix.stackexchange.com
i na blogach w postaci poradników czy kursów bash

Czy zapisać wynik czyli "output" do zmiennej czy do pliku to zależy tylko od twojej wygody.
Ja bym nie zaśmiecał komputera zbędnymi plikami jeśli to możliwe.
W powyższym przykładzie LOSS to zmienna przechowująca wynik komendy ping.
Powyższa komenda ping

--- Kod: ---
ping -c 1 "$IP" | grep -oP '\d+(?=% packet loss)'
--- Koniec kodu ---
powinna dać wynik 0 lub 100 lub nic. Uwzględnione to jest w warunku " if ".
Podałem także przykład z komendą "logger" jak zapisać komunikat do logu systemowego.
Oraz jak można znaleźć komunikat w logach syslog  i journalctl.
Wiecej o komendach przeczytasz wpisując w terminalu

--- Kod: ---
man nazwa_komendy
--- Koniec kodu ---

--- Kod: ---
nazwa_komendy --help
--- Koniec kodu ---
Do pomocy możesz także używać
https://explainshell.com/
shellcheck które można zainstalować i używać do sprawdzania pisowni lub niektórych błędów w skryptach. Należy traktować raczej jako podpowiedz niż wymóg.

Jeszcze coś
Użycie komendy grep do wyciągnięcia określonego fragmentu tekstu czasami jest nazywane parsowaniem.
Polecane jest używanie języka bash https://www.thegeekstuff.com/2010/07/bash-string-manipulation/
Np. użycie pętli while i jeśli wartość się zgadza to wypisanie wartości / tekstu i wyjście z pętli.
Ja osobiście lubię korzystać z komend nie wbudowanych w bash typu: sed , awk .
Komenda compgen może pokazać listę wbudowanych komend https://unix.stackexchange.com/questions/151118/understand-compgen-builtin-command

zuskrus01:

--- Kod: ---
Czy zapisać wynik czyli "output" do zmiennej czy do pliku to zależy tylko od twojej wygody.
Ja bym nie zaśmiecał komputera zbędnymi plikami jeśli to możliwe.
--- Koniec kodu ---
W moim przypadku lepiej chyba do pliku, bo inny skrypt będzie zmieniał tą zmienną jeśli przełączy na trasę domyślną

Zrobiłem coś takiego

--- Kod: ---
#!/bin/bash


IP="10.18.18.1"
LOSS=$(ping -c 1 "$IP" | grep -oP '\d+(?=% packet loss)')
STAN=$(cat stan |grep Dziala)

if [[ "$STAN" == "Dziala" ]]; then
               if [[ "$LOSS" == "0" ]]; then
                        echo "Trasa domyslna odpowiada"
                        echo "Dziala" > stan
                elif [[ "$LOSS" == "" ]] ; then
                        echo "Bledny adres IP"
                else
                                                echo "Host nie odpowiada"
                        echo "Wysyłam SMS"
                        #Skrypt do SMS
                        echo "Wysyłam email"
                        #Skrypt do email
                        echo "Uruchamiam skrypt do zmiany trasy"
                        #Skrypt do zmiany trasy
                        echo "Zmieniam stan trasy"
                        echo "Nie dziala" > stan
                fi
else
        echo "Zmien trase ręcznie"
fi

--- Koniec kodu ---

Jednak niezależnie od tego czy  ping jest czy nie ma zwraca mi wynik
--- Kod: ---
Zmien trase ręcznie

--- Koniec kodu ---

Nie bardzo wiem teraz co jest źle :/

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej