Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:unix:lab_skrypty_adv [2016/11/21 10:22] kkluza [Dodatkowe materiały] |
pl:dydaktyka:unix:lab_skrypty_adv [2019/06/27 15:50] (aktualna) |
====== Pisanie skryptów Bash ====== | ====== 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 ===== | ===== Ćwiczenie 1. Słownik krzyżówkowy ===== |
| |
Słownik do tego ćwiczenia znajduje się w pliku: ''/tmp/dictionary.txt''. | 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.) 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 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.) 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. | - (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". |
| |
**Bonus**: | |
(1 pkt.) Odgadnij hasło i sprawdź je przy użyciu ''/tmp/checkpassword''. Listę haseł do sprawdzenia można wysłać np. przy użyciu: \\ ''cat /tmp/dictionary.txt | /tmp/checkpassword''. \\ Podpowiedź do hasła: //Kończy sie na "us", ma 7 liter, nie zaczyna się na literę z pierwszej połowy alfabetu, a nazwę kojarzy każdy, kto był w Hong Kongu.// | |
| |
===== Ćwiczenie 2. Deszyfrator szyfru przestawieniowego ===== | ===== Ćwiczenie 2. Deszyfrator szyfru przestawieniowego ===== |
Słownik do tego ćwiczenia znajduje się w pliku: ''/tmp/slownikpl.txt''.\\ | 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 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 odgadnąć liczbę automatycznie, na podstawie tego, czy słowa z wiadomości występują w słowniku ''/tmp/slownikpl.txt''. | - (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 | unjwbxej heyjwd hdkwd unsz yfpnj xfrj f ptqjosj yt uwejxzsnęhnj qnyjw b yjo bnfitrtśhn |
| |
**Bonus**: (1 pkt.) Odgadnij pin -- sprawdź jego poprawność programem ''/tmp/checkpin'' np. ''echo 12345 | /tmp/checkpin''. | Bonus: (1 pkt.) Odgadnij 7-cyfrowy pin – sprawdź jego poprawność programem /tmp/checkpin np. echo 1234567 | /tmp/checkpin. |
| |
| |
|_|_|_|_|_ _ | |_|_|_|_|_ _ |
|_|_|_|_|_|_| | |_|_|_|_|_|_| |
| |
| |
| ===== Ć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. |
| |
| |