Table of Contents

Pisanie skryptów Bash

Przygotuj się do laboratorium

Dodatkowo przejrzeć wybrany / wszystkie (mogą się przydać do realizacji ćwiczeń w czasie tych i kolejnych zajęć):

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. (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.
  2. (1 pkt.) W przypadku, gdy nie podamy słowa, skrypt powinien wypisać komunikat “Nie podano słowa”.
  3. (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.
  4. (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. (1 pkt.) Napisz skrypt, który odszyfruje wiadomość zaszyfrowaną ROT13: havk gb anwyrcfml flfgrz an fjvrpvr
  2. (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).
  3. (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.
  4. (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. (1 pkt.) Proszę napisać skrypt, który wylosuje dowolne hasło ze słownika.
  2. (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.
  3. (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 :-)

  4. (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ą.
     _ _ _ _ _ _ _ _ _ 
    |_|_|_|_|_|_|_|_|_|
    |_|_|_|_|_|_|_|_|
    |_|_|_|_|_ _ 
    |_|_|_|_|_|_|