Skrypt powłoki to plik z poleceniami, które terminal wykonuje po kolei. Dzięki skryptom powtarzalne czynności — kopie zapasowe, porządkowanie plików, sprawdzanie systemu — wykonują się jednym poleceniem. Na lekcji uczniowie piszą pierwsze skrypty z zmiennymi, pętlą, warunkiem i funkcją.
Scenariusz jest przeznaczony na 45 minut dla klasy znającej podstawowe polecenia Linuksa i przekierowania — na przykład po lekcji o przekierowaniach i potokach.
Przygotowanie stanowisk
Potrzebny jest terminal z powłoką bash (Ubuntu, WSL lub maszyna wirtualna). Ćwiczenia wykonuj na zwykłym koncie, bez sudo. Rozpakuj pakiet z sekcji materiałów do folderu lekcja i przejdź do niego poleceniem cd. Plik dziennik.log leży w tym folderze. Skrypt rozwiazanie.sh odtwarza całą lekcję w katalogu tymczasowym i nie zmienia Twoich plików.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- uruchomić skrypt poleceniem
bash skrypt.shi rozpoznać pierwszą linię#!/usr/bin/env bash; - zdefiniować zmienne i wykonać obliczenia w
$(( )); - zapisać pętlę
for, warunekifz testem[ ]i funkcję z parametrami; - użyć wartości domyślnej parametru
${1:-gosc}.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: powtarzamy te same polecenia |
| 5–15 min | Zmienne, arytmetyka, echo |
| 15–22 min | for, if, funkcje |
| 22–37 min | Trzy zadania samodzielne |
| 37–42 min | Porównanie z kluczem |
| 42–45 min | Pytania kontrolne |
Pierwszy skrypt
Skrypt to zwykły plik tekstowy z rozszerzeniem .sh. Pierwsza linia #!/usr/bin/env bash wskazuje interpreter. Uruchamiamy go poleceniem bash skrypt.sh (albo po nadaniu prawa wykonywania — ./skrypt.sh). Komentarze zaczynają się od #. Opcja set -e przerywa skrypt przy pierwszym błędzie.
Zmienne, pętle, warunki i funkcje
- Zmienna:
imie="Ola"(bez spacji wokół=), odczyt$imielub"${imie}". Zawsze używaj cudzysłowów wokół odczytu, żeby spacje w wartości nie rozbijały polecenia. - Arytmetyka:
$((a + b)),$((a % b)). - Pętla:
for i in 1 2 3; do ...; doneorazfor plik in *.txt; do ...; done. - Warunek:
if [ "$liczba" -gt 10 ]; then ... else ... fi. Liczby porównujemy-gt,-lt,-eq, teksty=; spacje wewnątrz[ ]są obowiązkowe. - Funkcja:
witaj() { echo "Witaj, $1!"; }. Pierwszy argument to$1, a${1:-gosc}podstawia „gosc”, gdy argumentu brak. - Podstawienie polecenia:
ile=$(ls | wc -l)zapisuje wynik polecenia w zmiennej.
Zadania
Zadanie 1. Zmienne. Zapisz imię w zmiennej i wypisz powitanie. Dla a=7 i b=2 wypisz sumę, iloczyn i resztę z dzielenia jednym poleceniem echo.
Zadanie 2. Pętla i warunek. Wypisz pętlą „Spotkanie 1”–„Spotkanie 3”. Dla zmiennej liczba=15 wypisz, czy jest większa od 10. W katalogu z plikami a.txt, b.txt, c.log wypisz pętlą nazwy plików .txt.
Zadanie 3. Funkcja. Napisz funkcję witaj, która wypisuje powitanie dla pierwszego argumentu, a bez argumentu — dla słowa „gosc”. Wywołaj ją dwa razy. Zapisz w zmiennej liczbę plików w katalogu ($(ls | wc -l)) i wypisz ją.
Dla chętnych: zmień skrypt tak, aby podawał liczbę plików .txt zamiast wszystkich plików.
Rozwiązanie i wyniki
set -e
TMP=$(mktemp -d)
cd "$TMP"
touch a.txt b.txt c.log
echo "--- Zadanie 1"
imie="Ola"
echo "Czesc, $imie!"
a=7
b=2
echo "Suma: $((a + b)) Iloczyn: $((a * b)) Reszta: $((a % b))"
echo "--- Zadanie 2"
for i in 1 2 3; do
echo "Spotkanie $i"
done
liczba=15
if [ "$liczba" -gt 10 ]; then
echo "$liczba jest wieksza od 10"
else
echo "$liczba nie jest wieksza od 10"
fi
for plik in *.txt; do
echo "tekstowy: $plik"
done
echo "--- Zadanie 3"
witaj() {
echo "Witaj, ${1:-gosc}!"
}
witaj "Ewa"
witaj
ile=$(ls | wc -l)
echo "Plikow w katalogu: $ile"
cd /
rm -r "$TMP"
Skrypt rozwiazanie.sh z pakietu wykonuje te polecenia w katalogu tymczasowym i wypisuje:
--- Zadanie 1
Czesc, Ola!
Suma: 9 Iloczyn: 14 Reszta: 1
--- Zadanie 2
Spotkanie 1
Spotkanie 2
Spotkanie 3
15 jest wieksza od 10
tekstowy: a.txt
tekstowy: b.txt
--- Zadanie 3
Witaj, Ewa!
Witaj, gosc!
Plikow w katalogu: 3
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
imie = "Ola" zgłasza command not found | Wokół = nie wolno stawiać spacji. |
[: missing ] lub unary operator expected | Brakuje spacji wewnątrz [ ] albo zmienna bez cudzysłowów jest pusta. |
syntax error near unexpected token | Brakuje then, do, done lub fi. |
Zmienna wypisuje się jako tekst $imie | Napis w apostrofach nie podstawia zmiennych; użyj cudzysłowów. |
bad interpreter lub \r | Plik ma końce linii Windows (CRLF); zapisz skrypt z końcami LF. |
Permission denied dla ./skrypt.sh | Brak prawa wykonywania; uruchom przez bash skrypt.sh albo nadaj chmod +x. |
Pytania kontrolne i punktacja
- Jak uruchomić skrypt
skrypt.shbez nadawania praw wykonywania? - Co wypisze
echo $((7 % 2))? - Co robi zapis
${1:-gosc}?
Odpowiedzi: Poleceniem bash skrypt.sh. 1. Podstawia pierwszy argument funkcji lub skryptu, a gdy go brak — słowo gosc.
Proponowana punktacja (razem 10 punktów): zadanie 1 — zmienna i powitanie 1 pkt, trzy działania w $(( )) 2 pkt; zadanie 2 — pętla 1 pkt, if z testem [ ] 2 pkt, pętla po plikach 1 pkt; zadanie 3 — funkcja z parametrem 2 pkt, wartość domyślna 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej?
Następny krok to skrypty z argumentami, kopie zapasowe i uruchamianie zadań o stałych porach. Ten materiał rozwija dział o automatyzacji w kursie Linux w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: podręcznik Bash oraz instrukcje warunkowe. Zobacz też lekcję o poleceniach Linux.
Poprowadź kolejne lekcje Linux
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu Linux →