Skrypt rozwiązujący poniższe zadanie. -------------------------------------------------------------------------- Korzystając z poleceń grep i find napisz skrypt grepf [...] [<--> [...]] wywołujący program 'grep' dla wszystkich plików i podkatalogów z katalogów dir1 i ewentualnie innych zadanych. 'grep' ma być wywoływany z opcjami zadanymi po parametrze '--'. Przykład poprawnego wywołania: ./grepf getpid /usr/include ./grepf getpid /usr/include ./lab3 -- -i -------------------------------------------------------------------------- Skrypt jest dostępny w trzech wersjach: 1. wersja uproszczona, bez rozpatrywania białych znaków w nazwach plików/katalogów oraz we wzorcu (wystarczająca na kolokwium). 2. wersja zaawansowana, prawidłowo obsługująca również białe znaki. 3. wersja z uproszczoną składnią, korzystająca z rozszerzeń dostępnych w interpreterze bash. Uwaga, na kolokwium i egzaminie rozszerzenia bash _nie_ _są_ _dopuszczalne_, można korzystać tylko ze składni dostępnej w standardowym sh. Proszę zwrócić uwagę na następujące aspekty wersji zaawansowanej: - choćby najprostsze sprawdzanie składni wywołania, - sposób rozdzielania długich łańcuchów dla echo, - sposób wypisywania informacji o błędach, - wykorzystanie basename, - obsługa opcji wywołania wraz z poleceniem shift, - powód poprzedzania przez 'x' argumentów polecenia test, - przeznaczenie i sposób wykorzystania polecenia eval, zmienne dynamiczne i pseudo-tablice, sposób korzystania ze zmiennych o ustalanych dynamicznie nazwach, - specjalna interpretacja argumentu '--' dla grep, - ponieważ find nie przyjmuje '--', zatem jaki jest cel poprzedzającego 'case', - wykorzystanie xargs, - wykorzystanie expr, - zastosowanie "$@", - cytowania "" przy zadawaniu wartości zmiennym. Uwaga, w kodzie wykorzystano tandem opcji-rozszerzeń wersji GNU narzędzi find i xargs: 1. find ... -print0 2. xargs -0 Klasyczne pierwotne implementacje uniksowe powyższych poleceń nie dają możliwości obsługi nazw plików ze znakami specjalnymi.