5. cvičení


Programování v shellu

Základní konstrukce bash lze nalézt v souboru bash_basics.sh.


Úkoly

Skupina 15:45-17:15

  1. Napište funkce convert_to_decimal a convert_from_decimal. Funkce convert_to_decimal bere dva argumenty první je číslo a druhy je poziční soustava (2 až 64). Funkce převede číslo do desítkové soustavy. Funkce convert_from_decimal bere také dva argumenty, kde první je číslo v desítkové soustavě a druhý argument je soustava do které mame číslo převést. Čísla větší než 9 jsou malá a velká písmena anglické abecedy a znaky @ a _. Nepoužívejte žádné externí programy pro převod soustav.

        parallels@ubuntu:/media/psf/PhD/UNIX/Lectures$ ./homework_8.sh
        convert_from_decimal 222 3 -> 22020
        convert_from_decimal 222 16 -> de
        convert_from_decimal 222 32 -> 6u
    
        convert_to_decimal 22020 3 -> 222
        convert_to_decimal de 16 -> 222
        convert_to_decimal 6u 32 -> 222
    

    4 body

  2. Implementujte jako funkce (zjednodušené) programy dirname a basename: z cesty zadané jako parametr, po odebrání případného / na konci, vrátí (vypíše) část do a od poslední / (bez něj, pokud to není jediný znak). Pokud již cesta / neobsahuje, dirname vrátí '.' a basename celé jméno.

        parallels@ubuntu:/media/psf/PhD/UNIX/Lectures$ ./homework_9.sh /media/psf/PhD/UNIX/
        basename
        UNIX
        dirname
        /media/psf/PhD
    
        parallels@ubuntu:/media/psf/PhD/UNIX/Lectures$ ./homework_9.sh /media/psf/PhD/UNIX/Lectures/homework_9.sh
        basename
        homework_9.sh
        dirname
        /media/psf/PhD/UNIX/Lectures
    

    basename 2 body, dirname 2 body

  3. V systému bývá zvykem, že se u logů provadí tzv. rotace. Soubor xy se přejmenuje na xy.0, xy.0 na xy.1 atd. až do nějaké horní hranice, soubory s číslem nad touto hranicí se vymažou. Napište program, který dostává dva parametry - jméno souboru a maximální počet uložených kopií (lze vynechat, implicitní hodnota je 30) - a proveďte rotaci.

    4 body


Skupina 17:30-19:00

  1. Vytvořte skript (funkci), který vyhledá soubor zadaného jména (první parametr) v zadaném adresáři, resp. podstromu (druhý parametr). Skript musí strom prohledávat do hloubky, tj. v každém adresáři nejprve prohledá podadresáře a potom teprve zkontroluje jméno adresáře samotného. Skript vypisuje pouze první výskyt daného jména a pak skončí.

    4 body

  2. Implementuje jednoduchou RPN kalkulačku. Implementujte ji jako metodu double rpnCalc(String expr), kde jako argument bude předaný výraz v postfixové notaci (např. "1 2 3 + +" nebo "1 32 + 42 * 5 + 66 -") a na výstupu bude hodnota výrazu. Kalkulačka by měla fungovat následovně. Výraz je rozložen na jednotlivé atomy a potom je procházen zleva doprava. Pokud je nejlevější prvek číslo, je jeho hodnota uložena na zásobník, je-li to operátor, jsou odebrány ze zásobníku dvě hodnoty a je provedena příslušná operace. Výsledná hodnota je uložena na zásobník. Pro jednoduchost uvažujme pouze celá čísla a binární operace +, -, *, /.

    4 body

  3. Tabulka se v jazyce HTML vytváří pomocí značek <table>...</table>, každá řádka je uzavřena mezi znaky <tr>...</tr> a každé políčko vyznačují značky <td>...</td>. Napište program pro převod obsahu /etc/passwd do tabulky ve formátu HTML.

    4 body