===== 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|ogurt
Uwaga: 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ą.
_ _ _ _ _ _ _ _ _
|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|
|_|_|_|_|_ _
|_|_|_|_|_|_|