Bash jest pełnowartościowym skryptowym językiem programowania - oznacza to,
że umożliwia nie tylko tworzenie skryptów o prostej, liniowej strukturze
(to jest takich, w których polecenia wykonywane są po kolei, od pierwszego
do ostatniego), ale również dysponuje instrukcjami sterującymi (złożonymi),
które mogą wpływać na kolejność wykonywania pozostałych instrukcji.
Bash udostępnia instrukcję warunkową (if), instrukcję wyboru (case),
instrukcje iteracji (pętli) nieograniczonej (while i until) oraz dwie
postacie instrukcji iteracji ograniczonej (for), jak również kilka innych,
specyficznych dla bash'a instrukcji złożonych.
Instrukcje sterujące na ogół są stosowane w skryptach, ale mogą również być
używane bezpośrednio w linii poleceń.
Starsza wersja "for" przechodzi po obiektach, np. plikach o danym rozszerzeniu:
for i in *.rozszerzenie;
do
echo "$i";
done
Nowsza ma postać podobną do klasycznej pętli w C, np.:
for (( i=1; $i <= 5; i++ ));
do
echo $i;
done
W Bash'u możemy korzystać także z tablic, które deklarować możemy w następujący sposób:
table=(1 2 3 4)
table=$(seq 1 4)
Wypiswyanie ilości eklementów oraz wszystkich elementów:
echo "${#table[*]}"
echo "${table[*]}"
Po tablicy można iterować w następujący sposób:
numbers=$(seq 0 10);
for i in "${numbers[*]}";
do
echo "$i";
done
Natomiast usuwanie elemntów odbywa się za pomocą polecenia unset, np.:
unset numbers[0];
ZADANIA
UWAGA: w miarę możliwości proszę robić zadania na 2 sposoby: z instrukcjami
sterującymi przeszukującymi pliki, katalogi, np:
for f in *.rozszerzenie ... oraz za pomocą polecenia find. Oczywiście można
je także łączyć ze sobą.
Zad. 1
Przeczytać opisy poleceń złożonych (sterujących) bash'a. Wypróbować
możliwość
podawania ich bezpośrednio w linii poleceń, np.
declare -i a b
a= ...... #jakaś liczba
b= ...... #jakaś inna liczba
if [ $a -gt $b ]; then echo "Wieksza: $a"; else echo "Wieksza: $b";fi
Przeprowadzić analogiczną próbę naciskając
zamiast podawania
kolejnych średników, zaobserwować inny znak zgłoszenia (secondary prompt).
Zad. 2Utworzyć skrypt o dwóch argumentach wywołania (pierwszym liczbowym, a
drugim napisowym), który $1 razy wyświetli napis $2 (wskazówka: użyć
nowszej formy polecenia "for").
Zad. 3
Utworzyć skrypt, który pobierze od użytkownika 5 liczb, wstawi je to tablicy, pobierze kolejną liczbe "mnożnik", a następnie
pomnoży każdą komórkę tablicy przez "mnożnik" i wyświetli w konsoli uaktualnioną tablicę.
Zad. 4
Utworzyć skrypt, który wyświetli nazwę i rozmiar tego pliku w bieżącym
katalogu, który ma największy rozmiar.
Zad. 5Utworzyć skrypt o dwóch argumentach, który sprawdza, czy w katalogach o
pełnych nazwach ścieżkowych $1 i $2 powtarza się jakaś nazwa pliku (i na
końcu wyświetla odpowiedni komunikat).
Zad. 6
Utworzyć skrypt o jednym argumencie, który oblicza sumę rozmiarów
wszystkich plików w drzewie katalogów o korzeniu $1 (wskazówka: użyć
wywołań rekurencyjnych dla wszystkich podkatalogów danego katalogu).