CodeGym /Kursy /Docker SELF /Warunki (`if`, `else`) i pętle (`for`, `while`) w bashu

Warunki (`if`, `else`) i pętle (`for`, `while`) w bashu

Docker SELF
Poziom 3 , Lekcja 4
Dostępny

Warunki if, else i pętle for, while w bashu

1. Warunki w bash: if, else, i trochę magii

Do czego służą warunki?

Warunki pozwalają Twojemu skryptowi podejmować decyzje na podstawie danych wejściowych, zmiennych lub nawet wyników wykonywania poleceń. Na przykład, chcesz sprawdzić, czy plik istnieje, albo upewnić się, że serwer jest dostępny, aby wykonać kolejną akcję. Tutaj z pomocą przychodzi konstrukcja if.

Podstawowa składnia

Tak wygląda klasyczny warunek if w bash:

if [ warunek ]; then
    # Tutaj wykonywany jest kod, jeśli warunek jest prawdziwy
    echo "Warunek spełniony!"
else
    # Tutaj wykonywany jest kod, jeśli warunek jest fałszywy
    echo "Warunek nie został spełniony!"
fi

Słowa kluczowe:

  • if, then, else, i fi (końcowy blok if) — to magiczne słowa. Bez nich skrypt nie zadziała.
  • Nawiasy kwadratowe [ ... ] używane są do sprawdzania warunków.

Przykład 1: Sprawdzanie istnienia pliku

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "Plik $FILE istnieje."
else
    echo "Plik $FILE nie został znaleziony."
fi

Wyjaśnienie:

  • -f sprawdza, czy plik istnieje.
  • Jeśli plik istnieje, polecenie echo wyświetla odpowiednią wiadomość. Jeśli nie, wykonywany jest blok else.

Warunki z poleceniami

Możesz użyć wyniku wykonania polecenia jako warunku, bo w Linux wszystko jest poleceniem.

Przykład 2: Sprawdzanie dostępności strony

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "Strona jest dostępna."
else
    echo "Strona jest niedostępna."
fi

Wyjaśnienie:

  • ping -c 1 wysyła jedno zapytanie do serwera. Jeśli odpowie, warunek staje się prawdziwy.
  • &> /dev/null ukrywa wynik polecenia, aby nie zaśmiecać terminala.

Użycie operatora elif

Czasami if i else nie wystarczą. Trzeba uwzględnić kilka warunków. Tutaj z pomocą przychodzi elif.

Przykład 3: Określenie pory dnia

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "Dzień dobry!"
elif [ $HOUR -lt 18 ]; then
    echo "Dobry dzień!"
else
    echo "Dobry wieczór!"
fi

Wyjaśnienie:

  • date +%H zwraca aktualną godzinę w formacie 24-godzinnym.
  • Porównujemy aktualny czas z ustalonymi wartościami: jeśli mniej niż 12 — rano, mniej niż 18 — dzień, w przeciwnym razie — wieczór.

2. Pętle w bash: powtarzanie — matką nauki

Pętle to sposób, żeby twój skrypt powtarzał akcje, dopóki spełniony jest określony warunek. To szczególnie przydatne, jeśli trzeba przetworzyć wiele plików, powtórzyć zadanie kilka razy lub czekać na jakieś zdarzenie.

Pętla for

for przechodzi po liście wartości (na przykład pliki lub liczby) i wykonuje określoną akcję dla każdej z nich.

Przykład 4: Prosta pętla for

#!/bin/bash

for i in {1..5}; do
    echo "To jest iteracja numer $i"
done

Wyjaśnienie:

  • {1..5} — lista liczb od 1 do 5.
  • Przy każdej iteracji zmienna i przyjmuje wartość z listy.

Przykład 5: Iteracja plików w katalogu

#!/bin/bash

for FILE in /etc/*; do
    echo "Przetwarzanie pliku: $FILE"
done

Wyjaśnienie:

  • /etc/* — to lista wszystkich plików w folderze /etc.
  • Przy każdej iteracji zmienna FILE zawiera nazwę jednego pliku.

Pętla while

while wykonuje akcje, dopóki spełniony jest warunek.

Przykład 6: Zgadnij liczbę

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "Wpisz swoją propozycję (liczba od 1 do 10):"
    read GUESS
done

echo "Zgadłeś!"

Wyjaśnienie:

  • [ $GUESS -ne $SECRET ] — warunek trwa dopóki wprowadzona liczba GUESS nie jest równa sekretnej SECRET.

Łączenie pętli i warunków

Czasami warunki i pętle działają razem.

Przykład 7: Sprawdzanie kilku stron

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE jest dostępny."
    else
        echo "$SITE nie jest dostępny."
    fi
done

Wyjaśnienie:

  • Tablica SITES zawiera listę stron.
  • for przechodzi przez każdą stronę z tablicy.
  • if sprawdza dostępność strony przy użyciu ping.

3. Ćwiczenia praktyczne

Sprawdzanie domeny

Napisz skrypt, który przyjmuje nazwę domeny jako argument i sprawdza jej dostępność.

Wskazówka:

if ping -c 1 $1 &> /dev/null; then
    echo "Domena dostępna."
else
    echo "Domena niedostępna."
fi

Praca z plikami

Napisz skrypt, który sprawdza istnienie kilku plików i wyświetla wynik dla każdego z nich.

Wskazówka:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE istnieje."
    else
        echo "$FILE nie znaleziono."
    fi
done

Tabliczka mnożenia

Napisz skrypt z pętlami zagnieżdżonymi, który wyświetla tabliczkę mnożenia dla liczb od 1 do 10.

Wskazówka:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

Teraz możesz dodawać inteligencję i logikę do swoich skryptów bash. Warunki pozwalają sprawdzać stany i podejmować decyzje, a pętle pomagają automatyzować powtarzające się zadania. Przed Tobą jeszcze więcej możliwości automatyzacji zadań!

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION