==== Skrypty powłoki ==== Do zaliczenia przedmiotu każda osoba musi napisać dwa wybrane przez siebie skrypty i wysłać je mailem **do 09.06**. Proszę o wpisanie ''[SO]'' na początku tematu maila. \\ Poniżej lista tematów skryptów. Do listy tematów mogę dopisać inne – proszę o propozycje mailem. ==== Lista tematów ==== **~~Temat.#~~** Generowanie miniaturek \\ Skrypt przyjmuje jako argument listę katalogów. \\ Skrypt generuje dla każdego obrazu znajdującego się bezpośrednio w podanych katalogach miniaturę o określonym rozmiarze i umieszcza ją w podkatalogu ''tn'' w katalogu w którym znajduje się obraz. Miniaturkom ustawia czasy modyfikacji, zmiany i dostępu na identyczne jak odpowiednie czasy obrazu. \\ Skrypt wypisuje na ekranie nazwę każdego przetwarzanego obrazu. \\ W zadaniu zaleca się skorzystać z programu ''file'' do wykrywania typu MIME i programu ''convert'' (wchodzącego w skład pakiety narzędzi imagemagick) do generowania miniatur. **~~Temat.#~~** Ściąganie obrazków ze strony \\ Skrypt przyjmuje jako argument listę adresów URL do stron www. \\ Skrypt pobiera wskazane strony i wyciąga z nich adresy obrazów (przez obraz należy rozumieć tag '' plik docelowy'' \\ W zadaniu zaleca się skorzystać z programu ''exiftool''. **~~Temat.#~~** Konfiguracja powłoki \\ Przygotuj plik ''.bashrc'' który dla sesji interaktywnej ustawia kilka użytecznych aliasów, ustawi ładny prompt, zmieni długość historii, doda dodatkowe katalogi do zmiennej PATH, utworzy przynajmniej jedną użyteczną funkcję (np. tworzącą katalog i wchodzącą do niego) i wyświetli coś na ekranie (np. bieżącą zajętość dysków, fortunkę). **~~Temat.#~~** Porównanie metod kompresji \\ Skrypt przyjmuje jeden argument – nazwę pliku. \\ Skrypt kompresuje podany plik używając przynajmniej programów ''gzip'', ''bzip2'', ''xz'' i''zstd'' z przynajmniej trzema ustawieniami (profilami) dla każdego z tych programów (np. domyślne ustawienia, najwyższy poziom kompresji, średni poziom kompresji i użycie wielu wątków). Skrypt mierzy czas kompresji i rozmiar skompresowanych plików. \\ Na ekran wyświetlane są tabele czasu kompresji i poziomu kompresji mające w kolumnach nazwy programów a w wierszach profile. **~~Temat.#~~** Wyszukiwanie identycznych plików \\ Skrypt przyjmuje jako argument listę katalogów. \\ Skrypt przeszukuje rekurencyjnie podane katalogi w poszukiwaniu identycznych plików. Najpierw grupuje znalezione pliki rozmiarami, następnie w każdej grupie w której jest więcej niż jeden plik liczy sumy md5 każdego pliku. Jeśli dwa lub więcej plików ma tę samą sumę md5, porównuje je dla pewności programem ''cmp''. \\ Skrypt wypisuje na standardowe wyjście grupy identycznych plików (każda nazwa w osobnej linii) oddzielone od siebie pustą linią. **~~Temat.#~~** Sprawdzanie czy program generuje poprawny wynik \\ Skrypt przyjmuje jako argument nazwę polecenia. \\ Skrypt z pliku (o nazwie ustawionej jako zmienna na początku skryptu) czyta kolejno ścieżki do pliku z poprawnymi wynikami oraz listę argumentów z którymi takie wyniki powinny zostać otrzymane. Dla każdego takiego pliku skrypt uruchamia podane polecenie z odpowiadającymi argumentami i porównuje wynik polecenia z oczekiwanym. \\ Skrypt wyświetla na standardowym wyjściu kolejne nazwy plików z oczekiwanymi wynikami i jeśli testowany program wygenerował poprawne wyniki, to dodaje słowo ''pass'', a jeśli nie, dodaje na czerwono słowo ''FAIL'' i wypisuje pierwszą różniącą się linię. **~~Temat.#~~** Histogram odpowiedzi w pytaniach z kolokwium. \\ Skrypt przyjmuje jako argument ścieżkę do pliku z wynikami kolokwium. Przykładowy plik wejściowy zamieszczony jest poniżej. Fragment ''Q14[A+,D-]'' oznacza, że w pytaniu 14 zaznaczono poprawną odpowiedź A i błędną D. \\ Skrypt dla każdego pytania liczy ile razy padła dana odpowiedź, następnie wypisuje nazwę pytania i dla każdej odpowiedzi wypisuje linię składającą się z odpowiedniej litery i znaku ''='' powtórzonego tyle razy ile ta odpowiedź została zaznaczona. Linie z poprawnymi odpowiedziami mają być wypisane kolorem zielonym, z błędnymi kolorem czerwonym. \\ Przykładowy plik wejściowy **~~Temat.#~~** Przypomnienie o najbliższych urodzinach. \\ Skrypt korzysta z pliku w którym znajdują się cykliczne wydarzenia – daty i opisy (format pliku dowolny, przykład formatu: ''12.31 imieniny Sylwestra''). \\ Skrypt wyświetla wszystkie linie z pliku które dotyczą najbliższych dwóch tygodni, lub jeśli w przeciągu dwóch tygodni nie ma żadnych wydarzeń, wyświetla trzy najbliższe wydarzenia. **~~Temat.#~~** Wordle. \\ Skrypt losuje pięcioliterowe słowo ze słownika. Następnie, w pętli, odczytuje ze standardowego wejścia pięcioliterowe słowo i wyświetla je z powrotem na ekran, kolorując: 1) litery znajdujące się na tej samej pozycji w obu słowach w jeden sposób, 2) pozostałe litery znajdujące się w obu słowach w drugi sposób, 3) litery występujące tylko w jednym słowie w trzeci. Jeśli słowa są identyczne, wyświetlany jest komunikat o wygranej i skrypt się kończy. \\ Po szóstym niezgadnięciu słowa wyświetlane jest szukane słowo i komunikat o przegranej. ~~META: language = pl ~~