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
, ifi
(końcowy blokif
) — 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 blokelse
.
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 liczbaGUESS
nie jest równa sekretnejSECRET
.
Łą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życiuping
.
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ń!
GO TO FULL VERSION