|
|
pl:dydaktyka:unix:lab_skrypty_adv [2018/11/21 07:55] kkluza [Ćwiczenie 2. Deszyfrator szyfru przestawieniowego] |
pl:dydaktyka:unix:lab_skrypty_adv [2019/06/27 15:50] |
====== Pisanie skryptów Bash ====== | |
| |
===== DO PRZYGOTOWANIA ===== | |
Samodzielnie należy przed tym laboratorium przygotować: | |
| |
* podstawy pracy z wybranym edytorem vi, Emacs, nano, pico | |
* przypomnieć sobie artykuły pt.: {{:pl:dydaktyka:unix:gjn-sh.pdf|Podstawy programowania skryptów Sh}}, {{:pl:dydaktyka:unix:gjn-bash.pdf|GNU Bash więcej niż Sh}} | |
* przypomnieć sobie pracę z ''grep'' i wyrażeniami regularnymi, np.: | |
* http://www.linux.net.pl/~wkotwica/doc/grep/grep_7.html | |
* https://www.cyberciti.biz/faq/grep-regular-expressions/ | |
| |
Dodatkowo przeglądnąć (w celu ew. skorzystania w czasie zajęć): | |
| |
* zapoznać się z //[[http://www.tldp.org/guides.html#abs|Advanced Bash-Scripting Guide]]// | |
* przegląnąć artykuł (3 części) //Bash by example// [[http://www.ibm.com/developerworks/linux/library/l-bash/|część 1]], [[http://www.ibm.com/developerworks/library/l-bash2/|Część 2]], [[http://www.ibm.com/developerworks/library/l-bash3/|Część 3]] | |
* ew. przeglądnąć [[http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html|BASH Programming - Introduction]] | |
| |
===== Ćwiczenie 1. Słownik krzyżówkowy ===== | |
| |
Słownik do tego ćwiczenia znajduje się w pliku: ''/tmp/dictionaryen.txt''. | |
| |
- (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 b.eb..'' znalezionym dopasowaniem mogłoby być ''bieber''. | |
- (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: ''/tmp/slownikpl.txt''.\\ | |
| |
- (1 pkt.) Napisz skrypt, który odszyfruje wiadomość zaszyfrowaną ROT13: '' wrqan m plse cvah gb fvrqrz'' | |
- (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 ''/tmp/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. | |
| |
unjwbxej heyjwd hdkwd unsz yfpnj xfrj f ptqjosj yt uwejxzsnęhnj qnyjw b yjo bnfitrtśhn | |
| |
| |
===== Ćwiczenie 3. Kreator krzyżówek ===== | |
| |
Słownik do tego ćwiczenia znajduje się w pliku: ''/tmp/krzyzowkowe.txt''.\\ | |
| |
* (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ż 8 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 "kawa", program może wylosować hasła dodatkowe: | |
| |
|k|orniszon | |
|a|rtefakt | |
|w|oda | |
|a|zymut | |
| |
* (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ą. | |
____________ | |
|_|_|_|_|_|_|_|_|_| | |
|_|_|_|_|_|_|_|_| | |
|_|_|_|_|_ _ | |
|_|_|_|_|_|_| | |
| |
| |
===== Ćwiczenie 4. Lista mailingowa ===== | |
| |
Napisz skrypt ''grupamailingowa'' rozsyłający e-maile do wszystkich zapisanych członków grupy (proszę przetestować działanie skryptu na serwerze student). Skrypt powinien obsługiwać następujące opcje: | |
- (1 pkt.) Bez opcji skrypt pyta o temat i treść maila, a następnie używając polecenia ''mail'' rozsyła e-maile do wszystkich odbiorców podanych w pliku ''listaodbiorcow''. | |
- (1 pkt.) Dla opcji ''-a'' / ''-‐add'' -- dodaje podany jako argument adres e-mail do pliku ''listaodbiorcow''. | |
- (1 pkt.) Dla opcji ''-r'' / ''-‐remove'' -- usuwa podany jako argument adres e-mail z pliku ''listaodbiorcow''. | |
- (1 pkt.) W przypadku opcji ''-a'' / ''-‐add'' sprawdza czy podany adres e-mail jest prawidłowo skonstruowanym adresem e-mail (wyrażenie regularne) oraz sprawdza, czy podany adres nie znajduje się już na liście. | |
| |
| |
| |
| |
| |