Linux · Bash i skrypty

Bash od podstaw — pierwszy skrypt i zadania z automatyzacji

Zmienne, arytmetyka, pętla for, if, funkcje i parametry w Bashu. Trzy zadania, klucz z wynikami i skrypt rozwiązania.

45 minutPoziom podstawowyPliki i rozwiązania

Materiał redakcyjny TablicaPro · liceum i technikum

$ imie="Ola"
$ echo "Czesc, $imie!"
Czesc, Ola!
Czesc, Ola!
Pierwszy skrypt w kilku liniach.

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.sh i rozpoznać pierwszą linię #!/usr/bin/env bash;
  • zdefiniować zmienne i wykonać obliczenia w $(( ));
  • zapisać pętlę for, warunek if z testem [ ] i funkcję z parametrami;
  • użyć wartości domyślnej parametru ${1:-gosc}.
CzasPraca na lekcji
0–5 minProblem: powtarzamy te same polecenia
5–15 minZmienne, arytmetyka, echo
15–22 minfor, if, funkcje
22–37 minTrzy zadania samodzielne
37–42 minPorównanie z kluczem
42–45 minPytania 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 $imie lub "${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 ...; done oraz for 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

ObjawCo sprawdzić
imie = "Ola" zgłasza command not foundWokół = nie wolno stawiać spacji.
[: missing ] lub unary operator expectedBrakuje spacji wewnątrz [ ] albo zmienna bez cudzysłowów jest pusta.
syntax error near unexpected tokenBrakuje then, do, done lub fi.
Zmienna wypisuje się jako tekst $imieNapis w apostrofach nie podstawia zmiennych; użyj cudzysłowów.
bad interpreter lub \rPlik ma końce linii Windows (CRLF); zapisz skrypt z końcami LF.
Permission denied dla ./skrypt.shBrak prawa wykonywania; uruchom przez bash skrypt.sh albo nadaj chmod +x.

Pytania kontrolne i punktacja

  1. Jak uruchomić skrypt skrypt.sh bez nadawania praw wykonywania?
  2. Co wypisze echo $((7 % 2))?
  3. 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 →

Zobacz program kursu