Celem poniższej listy zadań jest zapoznanie się z mechanizmami shella uniksowego takimi jak: zmienne, wyrażenia warunkowe i pętle, operacje na wektorze argumentów. Postaraj się używać tylko programów wymienionych w zadaniu, i konstrukcji shella. W szczególności, postaraj się nie używać programów: grep, sed, awk, tr.

  1. [1p] Napisz skrypt, który poleceniem date będzie wyświetlał aktualną godzinę co określony czas, na przemian z wywoływaniem polecenia clear.

    Wskazówka: wykonywanie pewnych operacji w nieskończonej pętli można uzyskać konstrukcją:

    while true
    do
     ...
    done
    

    W raporcie odnotuj tylko wykonanie zadania.

  2. [2p] Napisz skrypt o nazwie tdir, który wywoła polecenie ls z opcjami -l i -t, plus całym wektorem argumentów skryptu. Dodatkowo, wyjście ls w skrypcie powinno być skierowane przez potok do polecenia less. Celem jest wygodne przeglądanie katalogów posortowanych po dacie ostatniego zapisu do pliku, ze stronicowaniem przez less.

    Przetestuj wywołanie skryptu zadając mu jako argumenty różne parametry opcjonalne ls (np. -a, -i, -F albo -R), a także różne nazwy plików i katalogów (w tym nazwy plików zawierających spacje).

    Upewniwszy się, że skrypt działa poprawnie, i pozwala na wszystkie możliwości wywołania ls, uporządkuj go, i zminimalizuj, aby wyglądał wzorcowo. Wklej skrypt do raportu.

  3. [1p] Napisz skrypt, podobny do prezentowanego na wykładzie, który policzy i zaraportuje liczbę plików w katalogu bieżącym, lub w katalogu podanym jako argument (jeśli jest argument). Jeśli argumentów wywołania jest więcej niż jeden, to należy policzyć i podać liczby plików oddzielnie dla każdego podanego katalogu. Wklej skrypt to raportu.

    Zwróć uwagę na możliwość występowania plików o nazwach zawierających spacje. Czy Twój skrypt prawidłowo je oblicza? A pliki ze znakiem NEWLINE w nazwie? Odpowiedz w raporcie na te pytania.

  4. [4p] Napisz skrypt do odpytywania użytkownika o wartości kilku parametrów. W pliku o nazwie zadanej pierwszym argumentem wywołania mamy szereg par „argument wartość” o postaci:
    pi 3.14
    e 2.72
    g 9.81
    c
    
    Skrypt powinien zapytać użytkownika o każdą z tych zmiennych, oferując możliwość zaakceptowania wartości domyślnej (przez naciśnięcie ENTER), podobnie jak skrypt odpytaj_kolor.sh prezentowany na wykładzie.

    Wynik pracy, w postaci nowego kompletu par „argument wartość” (z wartościami podanymi przez użytkownika) skrypt powinien zapisać na nowym pliku, o nazwie zadanej drugim argumentem wywołania.

    Zwróć uwagę, że źródłowy plik może nie mieć wartości dla niektórych zmiennych, jak w powyższym przykładzie. Wtedy skrypt powinien przedstawić tę sytuację użytkownikowi (w postaci pustej wartości domyślnej), jednak w przypadku gdyby ten nie wpisał nowej wartości, w pliku wynikowym powinna zostać wpisana wartość (napis): NIEZNANA.

    Wskazówka: na wykładzie była omawiana konstrukcja do wygodnego odpytywania użytkownika o wartość zmiennej, z podpowiedzią wartości domyślnej. Tę konstrukcję można tu wykorzystać, wbudowując ją w pętlę, czytającą kolejne pary z pliku. Należy tylko zbudować poprawne wyrażenie stopu pętli, gdy nie da się już przeczytać kolejnej zmiennej.

    Wskazówka2: dobrą konstrukcją do czytania pliku w pętli, wiersz po wierszu, z zatrzymaniem się po osiągnięciu końca pliku jest schemat:

    while read x y z
    do
      echo wczytane slowa $x $y $z ...
    done  < input_file
    

    Dołącz opracowany skrypt do raportu z zadania.

  5. [2p] Wybierz jakieś często używane polecenie (np. ls, albo ps, albo who), oraz najczęściej używane argumenty (opcje). Zdefiniuj jeden lub kilka aliasów basha poleceniem alias. Sprawdź wprowadzoną już definicję poleceniem alias (bez argumentów). Przetestuj jej działanie w różnych sytuacjach, w szczególności przetestuj jak działa z różnymi zestawami opcji/argumentów, zarówno uzupełniających te zawarte w aliasie, jak i zmieniające je.

    Następnie spróbuj zdefiniować wcześniej napisany skrypt tdir jako funkcję (niestety, w bashu nie da się jej zdefiniować jako aliasa).

    Opracowane definicje aliasów i funkcji wklej do raportu z wykonania zadania.

  6. [2p] Zlokalizuj pliki inicjalizacyjne w Twoim katalogu domowym, z których bash czyta swoją konfigurację startową (.bash_profile, .bashrc oraz inne, patrz część INVOCATION dokumentacji basha).

    Utwórz podkatalog o nazwie Bin w Twoim katalogu domowym, typowo przeznaczone do umieszczania prywatnych skryptów i programów użytkownika. Napisz wyrażenie dopisujące ten katalog do ścieżki PATH. Ważne: nie nadpisuj oryginalnej wartości PATH - powinna ona być prawidłowo (standardowo) skonfigurowana przez administratora systemu dla danej instalacji. Prywatny katalog Bin może być dopisany na koniec lub na początek ścieżki PATH (która możliwość wydaje Ci się lepsza?).

    Wpisz do odpowiedniego/odpowiednich plików startowych basha wyrażenie przedefiniowania ścieżki PATH, a także definicje aliasów i funkcji opracowanych we wcześniejszym punkcie.

    Sprawdź eksperymentalnie, że wszystkie definicje (modyfikacja PATH, aliasy i funkcje) działają poprawnie w następujących sytuacjach:

    W szczególności, upewnij się, że definicje nie są wywoływane wielokrotnie (np. ścieżka PATH nie przyrasta o wielokrotnie dopisane Bin).

    W raporcie z wykonanego zadania podaj swoje indywidualne wpisy wykonane w poszczególnych plikach inicjalizacyjnych. Jeśli masz jeszcze jakieś indywidualne definicje w bashu, to możesz również je podać.