Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

so:skrypty_tematy

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 1 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 2 Ś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 <img … z argumentem src). Następnie skrypt ściąga wszystkie obrazy z nazwami nie istniejącymi w bieżącym katalogu. Skrypt ściąga obrazy równolegle, ale z określoną górną ilością współbieżnych pobierań.
Skrypt wypisuje na ekranie każdy znaleziony na stronie obraz i wypisuje czy istnieje w bieżącym katalogu czy będzie pobrany oraz wypisuje komunikat o zakończniu pobierania każdego obrazu.
W zadaniu zaleca się skorzystać z programu wget lub curl do pobierania plików z sieci.

Temat 3 Testowanie programu z kombinacjami parametrów
Skrypt do testowania programu przyjmującego dwa parametry. Skrypt ma uruchamiać podany program z wszystkimi podanymi kombinacjami dla dwóch parametrów biorąc możliwe wartości parametrów z odpowiednich list.
Standardowe wejście1) każdego uruchomienia ma trafić do katalogu z nazwą testowanego programu i datą uruchomienia skryptu do pliku z nazwą jednoznacznie identyfikują kombinację parametrów. Pliki mają być następnie skompresowane.
Skrypt nie przyjmuje argumentów, ale w pierwszych kilku liniach należy umieścić zmienne pozwalające ustawić uruchamiane polecenie i zakresy parametrów.
Skrypt na standardowe wyjście ma wypisywać, przed uruchomieniem każdego testu, informacje o testowanej kombinacji i bieżący czas.
Wybór testowanego programu dowolny. Przykładowy program który można testować to np. program fio do testu wydajności dysków; przykładowe wykonanie w Bashu to:
fio <(echo -e "[foo] \n time_based \n runtime=1s \n filename=/tmp/testFile \n filesize=10M \n ioengine=posixaio \n readwrite=randrw \n rwmixread=10 \n blocksize=4k")
Parametry do zmiany to np. rozmiar bloku i procent odczytów.

Temat 4 Przygotowywanie i uruchomienie testu na zdalnej maszynie
Skrypt ma utworzyć tymczasowy katalog w którym umieści pliki z listy (lista czytana z pliku lub konfigurowalna na początku skryptu). Następnie skrypt ma przygotować plik konfiguracyjny i umieszczając w nim wartości podane jako argumenty skryptu. Następnie pliki mają być skopiowane do maszyny zdalnej (adres maszyny ma być ustawialny w zmiennej na początku skryptu) i na zdalnej maszynie ma zostać uruchomiony wskazany program (też ustawialny w zmiennej na początku skryptu). Standardowe wyjście i standardowy błąd uruchomionego programu mają trafić do pliku z nazwą programu i bieżącą datą.
Wybór testowanego programu i format pliku konfiguracyjnego dowolny. Przykładowy program który można testować i format pliku konfiguracyjnego można wziąć z poprzedniego tematu.

Temat 5 Rekurencyjne wyszukiwanie tekstu w katalogach
Skrypt przyjmuje jako pierwszy argument wyszukiwany tekst, jako kolejne listę katalogów.
Skrypt wyszukuje w plikach w podanych katalogach (rekurencyjnie) podanego tekstu. Dla plików pdf skrypt wyszukuje w tekście (pdftotext), dla plików skompresowanych z rozszerzeniem .gz/.bz2/.xz… używa odpowiednio zgrep/bzgrep/xzgrep…, dla plików .zip oraz dokumentów MS Office (np. .docx) i Open Document Format (np. .odt) wyszukuje w wynikach unzip -c, dla pozostałych plików używa zwykłego grep.
Skrypt ma wypisywać na standardowe wyjście nazwę pliku w którym znajduje się szukany tekst. Skrypt ma nie wyświetlać komunikatów o braku dostępu do plików.

Temat 6 Kopie zapasowe z wykorzystaniem rsync
Skrypt ma wykonywać kopię zapasową katalogów z listy (umieszczonej w osobnym pliku). Kopie zapasowe mają trafiać do określonego (w zmiennej na początku skryptu) katalogu na zdalnej maszynie. Każdorazowe uruchomienie skryptu ma tworzyć katalog z datą uruchomienia skryptu do którego trafiają zmienione od ostatniego uruchomienia skryptu pliki. Po wykonaniu kopii skrypt ma stworzyć plik z listą plików usuniętych od ostatniego uruchomienia skryptu, plik z listą zmienionych plików oraz plik z listą nowych plików, pod nazwami składającymi się z daty uruchomienia skryptu oraz przyrostków .del, .mod i .new.
W trakcie działania skrypt ma wypisywać co robi.
W skrypcie należy użyć programu rsync z opcjami --backup i --backup-dir (oraz zaleca się skorzystać z programów find i comm).

Temat 7 Porządkowanie zdjęć
Skrypt przyjmuje jako pierwszy argument katalog docelowy, a jako kolejne listę katalogów źródłowych.
Skrypt ma porządkować katalog ze zdjęciami. Ma przenieść każdy plik z katalogów źródłowych (rekurencyjnie) do podkatalogu rok/miesiąc/dzień w katalogu docelowym i zmienić plikom nazwy na godzina_minuta_sekunda__stara_nazwa. Jako datę skrypt ma brać dane EXIF (CreateDate, DateTimeOriginal) lub datę modyfikacji pliku jeśli plik nie ma danych EXIF. Jeśli dwa pliki z katalogów źródłowych mają tę samą nazwę i daty, skrypt ma dodawać na koniec nazwy (przed rozszerzenie) kolejne numery tak żeby nie stracić żadnego pliku.
W trackie pracy skrypt ma wypisywać linię plik źródłowy --> plik docelowy
W zadaniu zaleca się skorzystać z programu exiftool.

Temat 8 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 9 Porównanie metod kompresji
Skrypt przyjmuje jeden argument – nazwę pliku.
Skrypt kompresuje podany plik używając przynajmniej programów gzip, bzip2, xz izstd 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 10 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 11 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 12 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 13 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 14 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.

1) lub plik wynikowy, jeśli wybrany program wyniki umieszcza w pliku
so/skrypty_tematy.txt · ostatnio zmienione: 2023/06/07 23:05 przez jkonczak