Pisanie skryptów Bash
Przygotuj się do laboratorium
- Przypomnieć sobie pracę z grep i wyrażeniami regularnymi
- Przypomnieć sobie podstawy pracy z wybranym edytorem: vi, emacs, nano, mcedit, joe, pico, jed, zile
- Przeczytać artykuł Podstawy programowania skryptów Sh
- Przeczytać artykuł GNU Bash więcej niż Sh
Dodatkowo przejrzeć wybrany / wszystkie (mogą się przydać do realizacji ćwiczeń w czasie tych i kolejnych zajęć):
- Daniel Robbins - Bash by example: część 1, część 2, część 3 (pierwotnie było dostępne pod tym adresem)
Wiedza
Korzystamy z wiedzy z poprzednich zajęć, w szczególności Podstawy skryptów i filtrów oraz 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: 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: 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
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: 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ą._ _ _ _ _ _ _ _ _ |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_| |_|_|_|_|_ _ |_|_|_|_|_|_|