#Skrypty bash – pętle i case
Dostępne są trzy pętle:
Przykłady użycia pętli znajdują się w skryptach: Tworzenie plików zawierających dzisiejszą datę 1, Tworzenie plików zawierających dzisiejszą datę 2.
Proszę zwrócić uwagę na działania słowa kluczowego shift, które usuwa pierwszy argument wywołania.
Konstrukcja case jest rodzajem konstrukcji warunkowej, która pozwala wykonać określone działania w zależności od tego jaki wzorzec powłoki (składnia wzorców taka sama jak przy nazwach plików) spełnia dane słowo. Przykład użycia instrukcji case znajduje się w skryptcie: Proste menu do nawigacji po katalogach
##Zadania
Wszystkie skrypty powinny sprawdzać poprawność argumentów, jeśli argumentami mają być istniejące pliki lub katalogi.
Zgadywanie liczb II
Rozszerzyć poprzednią grę w zgadywanie liczb o możliwość wielu prób odgadnięcia:
Skrypt wybiera losową liczbę. Następnie skrypt prosi użytkownika o podanie liczby i odczytuje rozwiązanie. Gdy liczba jest większa od szukanej, wypisywana jest informacja o tym fakcie i pytanie jest ponawiane, gdy liczba jest mniejsza – podobnie wypisana jest informacja i pytanie zostaje powtórzone. Gdy użytkownik odgadł liczbę program wypisuje komunikat z gratulacjami i kończy działanie.
Maksimum
Napisać skrypt, który przyjmuje dowolną liczbę parametrów. Parametry powinny być liczbami całkowitymi (nie trzeba tego sprawdzać). Skrypt wypisuje maksimum z podanych liczb.
Nagłówki plików
Napisać skrypt, który przyjmuje n+1 argumentów. Pierwszy argument to plik wyjściowy, pozostałe – pliki wejściowe. Dla każdego pliku wejściowego w pliku wyjściowym zostają umieszczone następujących 5 linii:
W momencie wywołania skrypt ma sprawdzić, czy plik wyjściowy NIE istnieje, a wszystkie pliki wejściowe istnieją.
Podpowiedź: datę modyfikacji można uzyskać odpowiednim wywołaniem programu stat.
Linia wywołania procesów
Napisać skrypt, który przyjmuje parametry – dwie liczby całkowite a i b, a<b. Skrypt wypisuje linię poleceń (cmdline) wszystkich procesów o PID z przedziału [a,b] (domkniętego)
Aby wygenerować sekwencję liczb (np. do użycia z pętlą for) można użyć programu seq
Informacje o procesach można znaleźć w systemie plików proc w katalogu /proc.
Linie rozpoczynające się daną literą
Napisać skrypt, który przyjmuje n+1+m parametrów. Pierwsze n parametrów do pojedyncze litery (małe lub wielkie, należy rozróżniać wielkość liter), następnie następuje parametr o wartości -- (podwójny minus), następne m parametrów to nazwy plików.
Skrypt wypisuje wszystkie linie zaczynające się na dowolną z podanych liter ze wszystkich plików.
Uwaga: można użyć pętli tylko do odczytania argumentów z literami. Znalezienie linii musi się odbyć jednym wywołaniem grep, nie wolno wywoływać grepa w pętli.
Skrypt musi weryfikować poprawność argumentów linii poleceń i poprawnie obsługiwać pliki ze spacjami w nazwie.
Podpowiedzi:grep przyjmuje dowolnie dużo plików jako argumenty wywołania,shift ma wpływ na zawartość $* i $@,$* i $@ mają trochę inne działanie i tylko jeden jest tu poprawny.Transformacja plików
Skrypt przyjmuje dowolną liczbę ścieżek do plików jako argumenty. Dla każdego pliku z rozszerzeniem .txt wykonywana jest następująca akcja:
Tworzony jest plik z rozszerzeniem
Uwaga 1: do zamiany jednego zakresu bajtów na inny można użyć programu tr. W szczególności wywołanie tr a-z A-Z zamienia litery z zakresu a-z na listery z zakresu A-Z. Domyślnie wejściem jest stdin a wyjściem stdout.
Uwaga 2: O ile ten skrypt nie wykonuje pożytecznej pracy, można go wykorzystać jako bazę to tworzenia np. miniatur plików graficznych, czy konwersji plików między formatami.
Zakazane słowa a.k.a. cenzura
Skrypt przyjmuje n+1 agrumentów. Pierwszy argument to ścieżka to pliku zawierającego listę zakazanych słów (można założyć, że słowa są oddzielone spacjami). Kolejne n argumentów to ścieżki do plików do sprawdzenia.
Dla każdego pliku zostaje wykonane sprawdzenie, czy zawiera on jakiekolwiek z zakazanych słów, jeśli tak, wypisywany jest komunikat “Plik
Przed zakończeniem (ale po wypisaniu komunikatów dla każdego z plików) skrypt wypisuje nazwy wszystkich plików, które były w porządku.
Podpowiedź 1: Użyć zmiennych pomocniczych
Podpowiedź 2: Można użyć zagnieżdżonych pętli lub zbudować wyrażenie regularne sprawdzające wszystkie słowa na raz (operator |)
Podpowiedź 3: grep posiada opcję -v
Podpowiedź 4: Aby dopisać coś do zmiennej można użyć konstrukcji
VAR="$VAR nowa treść"Liczba i rozmiar plików w katalogach
Skrypt przyjmuje dowolną liczbę katalogów jako argumenty. W każdym katalogu tworzony jest plik status.txt. Plik zawiera trzy linie:
Podpowiedź: find potrafi filtrować pliki po typie.