Celem poniższej listy zadań jest zapoznanie się z mechanizmami shella uniksowego (Bourne shella) takimi jak: zmienne, operacje na wektorze argumentów, wyrażenia warunkowe i pętle.

Poniższe skrypty powinny być uruchomione przy użyciu shella i narzędzi na systemie Unix (Solaris - diablo). Jeśli nie potrafisz napisać rozwiązania poprawnego na Uniksie, i udało Ci się jedynie uruchomić swoje rozwiązanie pod Linuksem - zaznacz to w raporcie. Takie rozwiązanie będzie akceptowane, choć w niektórych przypadkach może być niżej ocenione.

Przygotowanie do zajęć

Przejrzyj w notatkach z wykładu część dotyczącą tworzenia prostych skryptów (policz), a także odwołania się do argumentów wywołania. Następnie sprawdź postać wywołania instrukcji warunkowej if, oraz pętli while. Na podstawie przykładów i dokumentacji napisz wyrażenie test sprawdzające wartość pierwszego argumentu wywołania skryptu.

Zwróć uwagę na zadania poniżej oznaczone do wykonania "na zajęciach". Postaraj się dobrze zrozumieć te zadania i przygotować się do ich sprawnego wykonania. Opracowując rozwiązania, postaraj się używać tylko programów wymienionych w zadaniu, i konstrukcji shella. W szczególności, nie używaj programów: grep, sed, awk, tr.

Z wyjątkiem, gdy zadanie jawnie tego wymaga, opracowane skrypty nie powinny nawiązywać dialogu z użytkownikiem, pytać o wartości argumentów, potwierdzenia, itp.

Wykonanie ćwiczenia

Zad.1. (1 punkt - na zajęciach)
Napisz skrypt policz, podobny do prezentowanego na wykładzie, który policzy i wyświetli liczbę plików w katalogu bieżącym. WSKAZÓWKA: opcja -1 do programu ls powoduje wyświetlanie po jednym pliku w linijce, a program wc można wywołać z opcją -l powodującą policzenie tylko liczby linijek.

Zad.2. (1 punkt - na zajęciach)
Napisz skrypt policz2 o działaniu takim jak policz z poprzedniego zadania, z dodatkowym użyciem argumentu opcjonalnego -a, podobnie jak program ls. To znaczy, z argumentem -a skrypt obliczy liczbę wszystkich plików w katalogu bieżącym, włącznie z plikami "ukrytymi" (o nazwach zaczynających się od kropki), a bez -a pominie te pliki.

Zad.3. (1 punkt - na zajęciach)
Wykorzystując instrukcję pętli logicznej while Bourne shella napisz skrypt, który poleceniem date będzie wyświetlał w kółko aktualną godzinę, co określony czas (przyjmijmy co 5 sekund), na przemian z czyszczeniem ekranu poleceniem clear. Aby zapewnić powtarzanie operacji co określony czas, po wyświetleniu czasu należy wywołać polecenie sleep 5.

Zad.4. (2 punkty - na zajęciach, lub 1 punkt - w domu)
Wykorzystując instrukcję warunkową if Bourne shella rozszerz skrypt z poprzedniego zadania tak, by można było zadać argumentem wywołania inny niż 5 sekund okres wyświetlania czasu. Jeśli użytkownik nie poda parametru, to skrypt powtarza wyświetlanie domyślnie co 5 sekund.

Zad.5. (1 punkt - w domu)
Wykorzystując instrukcję warunkową if Bourne shella napisz skrypt witaj do wyświetlania programem echo różnych komunikatów powitalnych w zależności czy aktualnie jest dzień roboczy czy świąteczny (dla uproszczenia, dzień tygodnia czy weekend).

WSKAZÓWKA: program date wyświetla informacje o bieżącej dacie. Domyślnie jest to pełny zapis daty zgodny z konwencjami bieżącej lokalizacji. Zwykle będzie to być język polski, ale jeśli uruchomimy date w innej lokalizacji to wyświetli się inny komunikat. Do sprawdzania dnia tygodnia przydatna będzie forma wywołania date która wyświetli tylko dzień tygodnia w postaci numerycznej.

WSKAZÓWKA 2: wynik działania polecenia date można przechwycić w skrypcie za pomocą podstawienia pod zmienną wyniku działania polecenia zagnieżdżonego, i następnie porównać z wartością oczekiwaną.

Raport

W raporcie z wykonania zadania proszę wkleić TYLKO skrypty opracowane do punktów 4 i 5. Nie załączaj tych skryptów jako oddzielnych plików. Raport może zawierać dodatkowe uwagi, wnioski, itp. w razie potrzeby, ale skrypty powinny być wklejone precyzyjnie, aby można było je skopiować i wykonać. Jeśli wydaje się to sensowne, skrypt może też zawierać komentarz(e).