===== Pisanie skryptów Bash ===== ==== Przygotuj się do laboratorium ==== * Przypomnieć sobie pracę z grep i [[lab_sed_awk|wyrażeniami regularnymi]] {{section>lab_filters#przygotuj_sie_do_laboratorium&noheader&nofooter}} ==== Wiedza ==== Korzystamy z wiedzy z poprzednich zajęć, w szczególności [[lab_filters|Podstawy skryptów i filtrów]] oraz [[lab_sed_awk|SED i Awk]]! ==== Ćwiczenia ==== Każde zdobyte 4 punkty = 1 plus. Można pracować w parach/grupach. Rozwiązania zadań należy pokazać do zakończenia zajęć! === Ćwiczenie 1. Słownik krzyżówkowy === Słownik do tego ćwiczenia znajduje się w pliku: ''{{lab_07_slownikpl.txt|slownikpl.txt}}'' \\ //(jest to systemowy plik ''/usr/share/dict/words'', w którym usunięto polskie znaki, a wszystkie litery zamieniono na małe)// - (1 pkt.) Proszę napisać skrypt, który dla słowa podanego jako argument, w którym dowolne znaki wstawiamy jako ".", wyświetli znalezione dopasowania ze słownika. \\ np. dla: ''./skrypt k.ak..'' znalezionym dopasowaniem mogłoby być ''krakow''. - (1 pkt.) W przypadku, gdy nie podamy słowa, skrypt powinien wypisać komunikat "Nie podano słowa". - (1 pkt.) W przypadku, gdy nie podamy słowa, skrypt powinien ponadto poprosić użytkownika o wprowadzenie słowa i pobrać od niego to słowo. - (1 pkt.) Skrypt powinien sprawdzać, czy pobrane słowo nie zawiera niedozwolonych znaków (innych niż litery i kropki) i wyświetlić komunikat "Podano nieprawidłowe znaki". === Ćwiczenie 2. Deszyfrator szyfru przestawieniowego === Słownik do tego ćwiczenia znajduje się w pliku: ''{{lab_07_slownikpl.txt|slownikpl.txt}}'' \\ //(jest to systemowy plik ''/usr/share/dict/words'', w którym usunięto polskie znaki, a wszystkie litery zamieniono na małe)// - (1 pkt.) Napisz skrypt, który odszyfruje wiadomość zaszyfrowaną ROT13: ''havk gb anwyrcfml flfgrz an fjvrpvr'' - (1 pkt.) Napisz skrypt, który odszyfruje poniższą wiadomość zaszyfrowaną analogicznym szyfrem przestawieniowym, ale z inną liczbą przesunięcia. Skrypt powinien wyświetlić rezultaty wszystkich możliwych przesunięć. Nie należy przejmować się polskimi znakami (one nie są zaszyfrowane). - (1 pkt.) Skrypt powinien sprawdzić, czy słowa z rozszyfrowanej wiadomości występują w słowniku ''{{lab_07_slownikpl.txt|slownikpl.txt}}'' \\ i dla każdej potencjalnego rezultatu wypisać: ''"Znaleziono w słowniku X / Y"'', \\ gdzie X to liczba słów z wiadomości występujących w słowniku, a Y liczba wszystkich słów rozszyfrowanej wiadomości. - (1 pkt.) Skrypt powinien odgadnąć klucz (liczbę przesunięcia) automatycznie, przyjmując że np. wiadomość rozszyfrowano, jeśli dopasowano ponad 30% słów ze słownikiem. zerqu inaiquco tuxxoyuco tomje tok fgcokyor yok cotjucy === Ćwiczenie 3. Kreator krzyżówek === Słownik do tego ćwiczenia znajduje się w pliku: ''{{lab_07_words_with_defs.txt|words_with_defs.txt}}'' \\ //(plik zaczerpnięty z [[https://github.com/Golpette/auto-crossword]])// - (1 pkt.) Proszę napisać skrypt, który wylosuje dowolne hasło ze słownika. - (1 pkt.) Skrypt powinien losować hasło tak długo, aż znajdzie hasło nie krótsze niż 5 liter, przy czym losowanie hasła powinno odbywać się w osobnej funkcji. - (1 pkt.) Dla ustalonego hasła skrypt następnie losuje hasła dodatkowe zaczynające się od każdej z liter hasła głównego.\\ Przykład: dla hasła głównego "subway", program może wylosować hasła dodatkowe: |s|hoot |u|nicorn |b|aby |w|ith |a|wful |y|ogurtUwaga: w słowniku brakuje haseł zaczynających się na litery z przedziału ''[l-r]''. Możesz dodać jakieś ręcznie albo obsłużyć tę sytuację w skrypcie :-) - (1 pkt.) Skrypt po podaniu opcji ''-‐print'' lub ''-p'' wypisuje pustą krzyżówkę (ascii art jak poniżej) oraz opisy do haseł, a ''-‐solved'' lub ''-s'' wypisuje krzyżówkę wypełnioną. _ _ _ _ _ _ _ _ _ |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_| |_|_|_|_|_ _ |_|_|_|_|_|_|