Kurs programowania w Bash

Witaj w kursie programowania w języku Bash! Bash (Bourne Again SHell) to potężne narzędzie do automatyzacji zadań w systemie operacyjnym Unix i jego pochodnych, takich jak Linux. Jest to język skryptowy, który umożliwia tworzenie skryptów do wykonywania różnorodnych operacji, od prostych zadań administracyjnych po bardziej zaawansowane zadania programistyczne.

Wstęp do Kursu Programowania w Bash

Cel Kursu: Celem tego kursu jest dostarczenie Ci solidnych podstaw programowania w Bash, abyś mógł efektywnie korzystać z potencjału tego języka skryptowego. Poznasz nie tylko podstawy składni i struktur kontrolnych, ale także praktyczne techniki automatyzacji zadań, przetwarzania tekstu, obsługi plików i wiele więcej.

Zawartość Kursu: Kurs został podzielony na siedem tygodni, z każdym tygodniowym modułem skoncentrowanym na konkretnej tematyce. Rozpoczniemy od wprowadzenia do Bash i podstaw skryptowania, a następnie stopniowo przejdziemy do bardziej zaawansowanych koncepcji, takich jak pętle, funkcje, przetwarzanie tekstu i komunikacja zewnętrznymi programami.

Dla Kogo Jest Ten Kurs: Ten kurs jest dedykowany zarówno początkującym, jak i osobom, które już miały kontakt z systemem Unix/Linux i chcą rozwijać umiejętności programowania w Bash. Jeśli jesteś administratorem systemu, programistą, lub po prostu pasjonatem informatyki, ten kurs zapewni Ci solidną podstawę do efektywnego korzystania z Bash w codziennej pracy.

Jak Korzystać z Kursu: Każdy tydzień kursu obejmuje nową tematykę, a lekcje są podzielone na krótkie, zrozumiałe części. Zachęcamy do praktycznego stosowania zdobytej wiedzy poprzez rozwiązywanie zadań praktycznych i pracę nad projektem końcowym.

Gotowy na fascynującą podróż w świat programowania w Bash? Zacznijmy!

Komentarze w Bashu:

Komentarze są fragmentami tekstu w kodzie programu, które nie są interpretowane jako instrukcje do wykonania przez interpreter, kompilator czy środowisko wykonawcze danego języka programowania. Komentarze służą jedynie do dokumentacji kodu i ułatwiają zrozumienie jego działania. Poniżej przedstawiam kilka kluczowych informacji na temat komentarzy:

Zastosowanie Komentarzy:

Dokumentacja Kodu:

Komentarze są używane do dokumentowania kodu, tłumaczenia jego struktury i funkcji. Dobra dokumentacja pomaga zrozumieć, jak działa kod, co ułatwia zrozumienie i utrzymanie go w przyszłości.

Pomoc dla Innych Programistów:

Komentarze są przydatne dla innych programistów pracujących nad tym samym kodem. Pomagają zrozumieć intencje oryginalnego autora i skrócić czas potrzebny na zaznajomienie się z kodem.

Debugowanie:

Wstawianie komentarzy do kodu może pomóc w identyfikacji i rozwiązaniu problemów podczas procesu debugowania. Programiści często dodają komentarze w miejscach, które są podatne na błędy.

Tymczasowe Wyłączanie Fragmentów Kodu:

Komentarze można również używać do tymczasowego wyłączania fragmentów kodu. Jest to przydatne, gdy chcemy przetestować, czy problem występuje w danym fragmencie, bez konieczności jego całkowitego usuwania.

Rodzaje Komentarzy:

Komentarze Jednolinijkowe:

Są to komentarze obejmujące tylko jedną linię i zazwyczaj zaczynają się od określonego znacznika, na przykład # w Bash, Pythonie, czy // w wielu językach programowania.

# To jest komentarz w Bash

Zasady Używania Komentarzy:

  1. Zachowaj Komentarze na Bieżąco:
    • Aktualizuj komentarze w miarę wprowadzania zmian do kodu. Komentarze, które przestają być zgodne z rzeczywistością, mogą być mylące.
  2. Unikaj Nadużywania Komentarzy:
    • Komentarze powinny być używane w miejscach, gdzie są naprawdę potrzebne. Nadmiar komentarzy może utrudnić czytanie kodu.
  3. Komentuj Skomplikowane Części Kodu:
    • Jeśli kod jest trudny do zrozumienia bez dodatkowego wyjaśnienia, umieść komentarze, które wyjaśnią, co robią konkretne fragmenty.
  4. Jasne i Zrozumiałe Komentarze:
    • Pisz jasne, zrozumiałe komentarze. Unikaj komentarzy, które nie dodają wartości do kodu.
  5. Unikaj Komentowania Oczywistości:
    • Jeżeli kod jest na tyle czytelny, że sam w sobie tłumaczy, co robi, nie ma potrzeby dodawania oczywistych komentarzy.

Dobrze używane komentarze mogą znacząco poprawić zrozumienie kodu i ułatwić współpracę w zespole programistycznym.

Zmienne Lokalne i Globalne:

Zmienne Lokalne:

Zmienne zdefiniowane wewnątrz funkcji są zazwyczaj lokalne i nie są dostępne poza tą funkcją.

funkcja_lokalna() {
    lokalna_zmienna="To jest zmienna lokalna"
    echo $lokalna_zmienna
}

funkcja_lokalna
echo $lokalna_zmienna  # to spowoduje błąd, bo zmienna jest lokalna

Zmienne Globalne:

Zmienne zdefiniowane poza funkcją są zazwyczaj globalne i dostępne we wszystkich funkcjach.

Parametry Skryptu:

Skrypt Bash może przyjmować argumenty, które są przekazywane do skryptu podczas jego wywołania z linii poleceń.

#!/bin/bash

echo "Pierwszy argument: $1"
echo "Drugi argument: $2"

Wywołanie Skryptu z Argumentami:

./moj_skrypt.sh argument1 argument2
globalna_zmienna="To jest zmienna globalna"

funkcja_globalna() {
    echo $globalna_zmienna
}

funkcja_globalna

Typy danych Bash:

W języku programowania Bash, jak wiele innych skryptowych języków, nie ma surowo zdefiniowanych typów danych. Bash traktuje dane jako ciągi znaków (tekst), co oznacza, że wszystko jest przechowywane jako tekst, nawet liczby. Niemniej jednak, dla celów operacji matematycznych czy porównań, Bash oferuje pewne konwencje i mechanizmy, które można interpretować jako typy danych. Poniżej przedstawiam kilka kluczowych koncepcji związanych z danymi w Bash:

Tekst (String):

Wszystko w Bash traktowane jest jako tekst, co oznacza, że nawet liczby są przechowywane jako ciągi znaków. Tekst jest zazwyczaj otoczony pojedynczymi lub podwójnymi cudzysłowami.

tekst="To jest tekst."

Warto zaznaczyć, że Bash jest językiem o składni prostszej niż wiele innych, co sprawia, że manipulacja danymi może być bardziej elastyczna, ale jednocześnie wymaga pewnej ostrożności, zwłaszcza jeśli chodzi o konwersje typów w kontekście operacji matematycznych czy porównań.

Liczby:

Bash obsługuje operacje matematyczne, ale liczby są zwykle traktowane jako tekst, z wyjątkiem kontekstów matematycznych.

liczba=42

Tablice (Arrays):

Bash umożliwia tworzenie tablic, które są zbiorami wartości, indeksowanych liczbowo lub alfanumerycznie.

tablica=("wartość1" "wartość2" "wartość3")

Zmienne Logiczne:

Zmienne logiczne często używane są do warunków logicznych.

prawda=true
falsz=false

Polecenia:

Wynik wykonania polecenia może być przechowywany w zmiennej.

rezultat=$(ls)

Zmienne Środowiskowe:

Bash przechowuje informacje o środowisku w zmiennych środowiskowych.

echo $HOME

Funkcje:

W Bash możemy definiować funkcje, które przyjmują argumenty i zwracają wartości.

function przywitaj() {
    echo "Witaj, $1!"
}

przywitaj "Użytkowniku"

Pliki i Katalogi:

Bash obsługuje operacje na plikach i katalogach, traktując je jako specjalne rodzaje danych.

plik="nazwa_pliku.txt"

Operacje matematyczne w Bash:

W języku Bash możemy przeprowadzać operacje matematyczne, ale jest to dość ograniczone w porównaniu do bardziej zaawansowanych języków programowania. W Bash operacje matematyczne zwykle są wykonywane przy użyciu wbudowanego polecenia (( )) lub przy użyciu poleceń let i expr. Poniżej znajdziesz przykłady najważniejszych operacji matematycznych w Bash:

Dodawanie:

wynik=$((2 + 3))
echo $wynik   # Wypisze: 5

Można także użyć polecenia let:

let "wynik = 2 + 3"

Odejmowanie:

wynik=$((5 - 2))
echo $wynik   # Wypisze: 3

Użycie let:

let "wynik = 5 - 2"

Mnożenie:

wynik=$((4 * 3))
echo $wynik   # Wypisze: 12

Użycie let:

let "wynik = 4 * 3"

Dzielenie:

wynik=$((10 / 2))
echo $wynik   # Wypisze: 5

Użycie let:

let "wynik = 10 / 2"

Warto zaznaczyć, że w przypadku dzielenia, Bash traktuje wynik jako liczbę całkowitą.

Reszta z Dzielenia (modulo):

reszta=$((10 % 3))
echo $reszta  # Wypisze: 1

Użycie let:

let "reszta = 10 % 3"

Potęgowanie:

W Bash nie ma bezpośredniego operatora potęgowania, ale można użyć pętli, aby uzyskać wynik potęgowania.

base=2
exponent=3
wynik=1

for ((i = 1; i <= exponent; i++)); do
    wynik=$((wynik * base))
done

echo $wynik   # Wypisze: 8

Te operacje matematyczne mogą być używane w różnych kontekstach, takich jak obliczenia w skryptach Bash lub manipulacja liczbami podczas operacji na plikach czy kalkulacjach. Warto jednak pamiętać o tym, że Bash traktuje większość liczb jako ciągi znaków, więc konieczne jest użycie odpowiednich mechanizmów, aby uniknąć błędów wynikających z konwersji typów.

Operacje logiczne w języku Bash:

Operacje logiczne w języku Bash są często używane w warunkach decyzyjnych, pętlach i innych konstrukcjach sterujących, aby sprawdzić czy pewne warunki są spełnione. Oto najważniejsze operacje logiczne w Bash:

Negacja (!):

Negacja jest używana do odwrócenia wartości logicznej. Jeśli warunek jest prawdziwy, to ! sprawi, że stanie się fałszywy, i odwrotnie.

prawda=true
falsz=false

echo $(!prawda)  # Wypisze: false

Koniunkcja (&&):

Operator koniunkcji (&&) zwraca true tylko wtedy, gdy oba warunki są prawdziwe.

warunek1=true
warunek2=true

if [ $warunek1 ] && [ $warunek2 ]; then
    echo "Oba warunki są spełnione."
fi

Alternatywa (||):

Operator alternatywy (||) zwraca true, jeśli przynajmniej jeden z warunków jest prawdziwy.

warunek1=true
warunek2=false

if [ $warunek1 ] || [ $warunek2 ]; then
    echo "Przynajmniej jeden warunek jest spełniony."
fi

Porównanie (==, !=, <, >, <=, >=):

Operatory porównania są używane do porównywania wartości zmiennych.

liczba1=5
liczba2=10

if [ $liczba1 -eq $liczba2 ]; then
    echo "Liczby są równe."
fi

if [ $liczba1 -lt $liczba2 ]; then
    echo "Liczba1 jest mniejsza niż Liczba2."
fi
  • -eq: równy
  • -ne: różny
  • -lt: mniejszy niż
  • -le: mniejszy lub równy
  • -gt: większy niż
  • -ge: większy lub równy

Grupowanie Warunków:

Możemy grupować warunki przy użyciu nawiasów ( ) w celu zdefiniowania złożonych warunków logicznych.

warunek1=true
warunek2=false
warunek3=true

if [ $warunek1 ] && ( [ $warunek2 ] || [ $warunek3 ] ); then
    echo "Warunki są spełnione."
fi

Operacje logiczne są kluczowe dla sterowania przepływem programu w Bash i są powszechnie stosowane w warunkach, pętlach i instrukcjach warunkowych, aby tworzyć bardziej złożone skrypty i programy.

Instrukcje Warunkowe (if, else, elif):

Instrukcje warunkowe w języku Bash pozwalają na wykonanie różnych działań w zależności od spełnienia pewnych warunków. Główne instrukcje warunkowe to if, else, elif (skrót od „else if”). Operatorów logicznych używamy w warunkach do porównywania wartości zmiennych i tworzenia wyrażeń logicznych. Oto podstawowe informacje na ten temat:

Instrukcja if:

if jest podstawową instrukcją warunkową. Jeśli warunek umieszczony po if jest spełniony (prawdziwy), to blok kodu zagnieżdżony wewnątrz if jest wykonany.

if warunek; then
    # kod do wykonania, gdy warunek jest prawdziwy
fi

Instrukcja else:

else umożliwia wykonanie alternatywnego bloku kodu, gdy warunek w instrukcji if nie jest spełniony.

if warunek; then
    # kod do wykonania, gdy warunek jest prawdziwy
else
    # kod do wykonania, gdy warunek nie jest prawdziwy
fi

Instrukcja elif:

elif pozwala na sprawdzenie kolejnych warunków, jeśli poprzednie nie zostały spełnione. To jest skrót od „else if”.

if warunek1; then
    # kod do wykonania, gdy warunek1 jest prawdziwy
elif warunek2; then
    # kod do wykonania, gdy warunek2 jest prawdziwy
else
    # kod do wykonania, gdy żaden z poprzednich warunków nie jest prawdziwy
fi

Operatory Logiczne:

-eq: Równy: Porównuje, czy dwie wartości są równe.

if [ $liczba1 -eq $liczba2 ]; then
    # kod do wykonania, gdy liczba1 jest równa liczba2
fi

-ne: Różny: Sprawdza, czy dwie wartości są różne.

if [ $liczba1 -ne $liczba2 ]; then
    # kod do wykonania, gdy liczba1 jest różna od liczba2
fi

-lt, -le: Mniejszy, Mniejszy lub Równy: Porównuje, czy jedna wartość jest mniejsza (lub mniejsza lub równa) od drugiej.

if [ $liczba1 -lt $liczba2 ]; then
    # kod do wykonania, gdy liczba1 jest mniejsza od liczba2
fi

-gt, -ge: Większy, Większy lub Równy: Porównuje, czy jedna wartość jest większa (lub większa lub równa) od drugiej.

if [ $liczba1 -gt $liczba2 ]; then
    # kod do wykonania, gdy liczba1 jest większa od liczba2
fi

Operatory logiczne w warunkach:

  • && (i): Warunek jest prawdziwy, gdy oba warunki są spełnione.
  • || (lub): Warunek jest prawdziwy, gdy przynajmniej jeden z warunków jest spełniony.
if [ warunek1 ] && [ warunek2 ]; then
    # kod do wykonania, gdy oba warunki są spełnione
fi

if [ warunek1 ] || [ warunek2 ]; then
    # kod do wykonania, gdy przynajmniej jeden z warunków jest spełniony
fi

Kombinując instrukcje if, else, elif i operatory logiczne, możemy tworzyć bardziej złożone struktury sterujące w skryptach Bash, dostosowując działanie programu do różnych sytuacji.

Pętle pętli: for, while, i until.

W języku Bash mamy trzy główne rodzaje pętli: for, while, i until. Pętle umożliwiają wielokrotne wykonanie pewnego bloku kodu w zależności od spełnienia warunku lub iteracji przez zbiór elementów. Poniżej znajdziesz opis każdej z tych pętli oraz przykłady ich użycia:

Pętla for:

Pętla for używana jest do iteracji przez zbiór elementów, takich jak tablica, lista plików, czy sekwencja liczbowego.

for zmienna in element1 element2 element3; do
    # kod do wykonania w każdej iteracji
    echo $zmienna
done

Przykład z iteracją przez listę plików:

for plik in *.txt; do
    echo "Przetwarzam plik: $plik"
done

Pętla while:

Pętla while wykonuje blok kodu tak długo, jak długo warunek jest prawdziwy.

while warunek; do
    # kod do wykonania, dopóki warunek jest prawdziwy
    # pamiętaj o aktualizacji warunku wewnątrz pętli, aby uniknąć nieskończonej pętli
done

Przykład z licznikiem w pętli while:

licznik=0
while [ $licznik -lt 5 ]; do
    echo "Iteracja: $licznik"
    licznik=$((licznik + 1))
done

Pętla until:

Pętla until jest podobna do while, ale wykonuje blok kodu, dopóki warunek nie jest prawdziwy.

until warunek; do
    # kod do wykonania, dopóki warunek jest fałszywy
    # pamiętaj o aktualizacji warunku wewnątrz pętli, aby uniknąć nieskończonej pętli
done

Przykład z licznikiem w pętli until:

licznik=0
until [ $licznik -ge 5 ]; do
    echo "Iteracja: $licznik"
    licznik=$((licznik + 1))
done

Przetwarzanie plików przy użyciu pętli:

Przetwarzanie plików jest jednym z częstych zastosowań pętli w Bash. Przykład z użyciem pętli for do przeglądania plików w danym katalogu:

for plik in *; do
    if [ -f $plik ]; then
        echo "Przetwarzam plik: $plik"
        # dodaj tutaj operacje, które chcesz wykonać na każdym pliku
    fi
done

W tym przykładzie pętla for przechodzi przez każdy plik w bieżącym katalogu, a następnie wykonuje określone operacje tylko na plikach (ignorując katalogi). Pętle while i until mogą być również używane do przetwarzania plików, zwłaszcza gdy warunki związane z przetwarzaniem są bardziej skomplikowane.

Funkcje w Bash:

W Bash funkcje są używane do zorganizowania kodu na bardziej modułowe fragmenty. Funkcje pozwalają na wielokrotne wykorzystanie określonego bloku kodu. Oto ogólna składnia tworzenia i wywoływania funkcji:

Tworzenie Funkcji:

nazwa_funkcji() {
    # kod funkcji
    echo "Witaj, jestem funkcją!"
}

Wywoływanie Funkcji:

nazwa_funkcji  # wywołanie funkcji

Parametry Funkcji:

Funkcje w Bash mogą przyjmować parametry, co pozwala na przekazywanie im różnych danych.

Przykład Funkcji z Parametrami:

wyswietl_powitanie() {
    echo "Witaj, $1!"
}

wyswietl_powitanie "Użytkowniku"

Warto zaznaczyć, że przekazywanie parametrów do funkcji i zarządzanie zmiennymi lokalnymi i globalnymi są ważnymi aspektami programowania w Bash, szczególnie w przypadku większych projektów, gdzie modularność i czytelność kodu są kluczowe.

Przetwarzanie Tekstu w Bash:

grep (Global Regular Expression Print):

grep służy do przeszukiwania plików w poszukiwaniu wzorców i wypisywania linii zawierających pasujące do tych wzorców fragmenty tekstu.

Przykład:

grep "pattern" plik.txt

sed (Stream Editor):

sed to potężne narzędzie do przetwarzania i edycji tekstu w strumieniach.

Przykład:

sed 's/old_pattern/new_pattern/g' plik.txt

awk:

awk to język programowania używany głównie do przetwarzania i analizy tekstu. Jest potężnym narzędziem do filtrowania, przetwarzania i analizy danych w plikach tekstowych.

Przykład:

awk '/pattern/ {print $1, $2}' plik.txt

Operacje na Plikach i Katalogach:

Kopiowanie Pliku:

<code>cp plik.txt nowy_plik.txt</code>

Przenoszenie Pliku:

<code>mv plik.txt katalog_docelowy/</code>

Usuwanie Pliku:

<code>rm plik.txt</code>

Listowanie Zawartości Katalogu:

<code>ls</code>

Tworzenie Nowego Katalogu:

<code>mkdir nowy_katalog</code>

Usuwanie Katalogu:

<code>rmdir katalog_do_usuniecia</code>

Te polecenia to tylko podstawowe operacje na tekście, plikach i katalogach w Bash. Mogą być one wykorzystywane w bardziej złożonych skryptach do automatyzacji różnych zadań, takich jak przeszukiwanie, analiza, czy manipulacja danymi tekstowymi czy plikami.

Obsługa plików JSON w Bash:

Parsowanie Pliku JSON:

Do parsowania plików JSON w Bash możemy użyć polecenia jq. Jeśli nie jest zainstalowane, możemy je zainstalować przy użyciu menedżera pakietów dla danego systemu operacyjnego.

# Instalacja jq
sudo apt-get install jq  # dla systemów opartych na Debianie, takich jak Ubuntu

Przykład parsowania pliku JSON:

json_data='{"name": "John", "age": 30, "city": "New York"}'
name=$(echo $json_data | jq -r '.name')
age=$(echo $json_data | jq -r '.age')

echo "Name: $name"
echo "Age: $age"

Tworzenie Pliku JSON:

Możemy użyć poleceń echo i jq do generowania plików JSON.

<code>echo '{"name": "Alice", "age": 25, "city": "San Francisco"}' &gt; plik.json</code>

Praca z danymi CSV:

Do obsługi plików CSV w Bash często używane są polecenia takie jak awk czy cut. Oto kilka przykładów:

1. Wybieranie Kolumn z Pliku CSV:

# Wybieranie drugiej kolumny z pliku CSV
awk -F ',' '{print $2}' plik.csv

Filtracja Wierszy z Pliku CSV na podstawie Warunku:

# Filtracja wierszy, w których trzecia kolumna zawiera wartość "Warsaw"
awk -F ',' '$3 == "Warsaw" {print}' plik.csv

Sumowanie Kolumny z Pliku CSV:

# Sumowanie wartości w trzeciej kolumnie
awk -F ',' '{sum+=$3} END {print sum}' plik.csv

Zastępowanie Wartości w Pliku CSV:

# Zamiana wartości "OldValue" na "NewValue" w drugiej kolumnie
awk -F ',' '{gsub(/OldValue/, "NewValue", $2)} {print}' plik.csv

Te przykłady przedstawiają podstawowe operacje na plikach JSON i CSV w Bash. Jeśli potrzebujesz bardziej zaawansowanej obsługi, warto rozważyć użycie narzędzi stworzonych specjalnie do przetwarzania danych w tych formatach.

Zadania końcowe na podsumowanie kursu programowania w Bash:

Zadanie 1: Skrypt do Analizy Pliku CSV

Napisz skrypt Bash, który będzie analizować plik CSV zawierający dane o użytkownikach. Plik powinien zawierać kolumny takie jak „Imię”, „Nazwisko”, „Wiek”, „Miasto”. Skrypt powinien wykonać następujące operacje:

  1. Zliczanie Liczby Użytkowników:
    • Zlicz liczbę wierszy w pliku, aby dowiedzieć się, ile użytkowników znajduje się w bazie.
  2. Średni Wiek Użytkowników:
    • Oblicz średni wiek użytkowników na podstawie danych z kolumny „Wiek”.
  3. Najczęściej Występujące Miasto:
    • Zidentyfikuj miasto, które pojawia się najczęściej w danych.
  4. Generowanie Raportu:
    • Stwórz plik raportu zawierającego wyniki z punktów 1-3.

Zadanie 2: Automatyzacja Zadań Systemowych

Napisz skrypt Bash, który automatyzuje kilka zadań systemowych. Skrypt powinien:

  1. Sprawdzać Wykorzystanie Dysku:
    • Wykorzystaj polecenie df do sprawdzenia, ile miejsca zajmują poszczególne partycje dyskowe.
  2. Archiwizować Logi Systemowe:
    • Stwórz archiwum zawierające pliki logów systemowych i przenieś je do określonego katalogu.
  3. Aktualizować System:
    • Wykorzystaj polecenie apt-get do aktualizacji systemu.
  4. Planować i Wykonywać Backup:
    • Stwórz skrypt, który codziennie automatycznie tworzy kopię zapasową określonych plików i katalogów.

Zadanie 3: Program do Konwersji Danych

Napisz program w Bash, który przekształca dane w jednym formacie do drugiego. Na przykład, skrypt może obsługiwać konwersję pliku CSV na plik JSON lub odwrotnie. Program powinien być elastyczny i obsługiwać różne rodzaje danych.

Zadanie 4: Skrypt do Monitorowania Zasobów

Napisz skrypt monitorujący zasoby systemowe, takie jak CPU, pamięć RAM, i obciążenie systemu. Skrypt powinien:

  1. Pobierać Informacje o CPU:
    • Wykorzystaj polecenie top lub ps do uzyskania informacji o obciążeniu CPU przez różne procesy.
  2. Monitorować Użycie Pamięci RAM:
    • Zastosuj odpowiednie polecenie, aby sprawdzić, jakie procesy zużywają najwięcej pamięci RAM.
  3. Wykrywać Wysokie Obciążenie Systemu:
    • Jeżeli obciążenie systemu przekroczy pewien próg, wygeneruj powiadomienie.
  4. Zapisywać Wyniki do Pliku Dziennika:
    • Zapisz wyniki monitorowania do pliku dziennika w celu analizy.