Úvod do UNIXu – cvičení 6. 5. 2016

Domácí úkoly

  1. Vytvořte shellový skript, který bude následující problém řešit čistě pomocí shellu, tj. bez nástrojů sed a awk. Chtěl bych navíc, aby vaše skripty byly dobře strukturovány. Zadefinujte v nich tedy vhodné funkce řešící parciální problémy. Častými kandidáty na zabalení do funkcí bývají např. těla cyklů, ale to je na vás.
    Váš skript by měl na standardním vstupu očekávat data po řádcích ve formátu "název souboru,seznam tagů oddělených mezerou". Pro každý tag by měl skript vyrobit shodně pojmenovaný soubor, a to v adresáři, který uživatel zvolí pomocí prvního parametru skriptu. Ten tedy musí být vyžadován. Každý soubor pro tag by pak měl na své první řádce obsahovat počet souborů mající daný tag přiřazený a na dalších řádcích by měl být uveden výčet těchto souborů.
    Např. pro následující vstup by měl skript spuštěný jako ./ukol.sh /tmp/neex/ vytvořit soubory /tmp/neex/historicky, /tmp/neex/valecny, /tmp/neex/cernobily a /tmp/neex/romanticky s výše naznačeným obsahem.
            
    ../Titanic-1997-HD.mp4,romanticky historicky
    The Longest Day (1962).mkv,historicky valecny cernobily
    /home/filmovymaniak/casablanca.avi,cernobily romanticky valecny
            
          
    Dbejte prosím na to, aby odevzdané skripty skutečně dělaly co mají. Částečná řešení totiž nejsou dost dobrá – stejně tak, jako u zkoušky, která vás čeká. (2 body)

Řešení domácích úkolů z minula

  1. Znovu vyřešte domácí úkol z předminulého cvičení, ale tentokrát čistě pomocí prostředků shellu. Konkrétně s výjimkou nástrojů grep a sed smíte použít vše, co jsme si na cvičení zatím ukazovali. (1 bod)
            
    #!/bin/bash
    
    while read radek; do
    
      # buď odstavec skončil
      if [ -z "$radek" ]; then
    
        if [ -n "$odstavec" ]; then
          echo "$odstavec"
          odstavec=''
        fi
    
      # nebo čteme další řádek odstavce
      else
    
        if [ -z "$odstavec" ]; then
          odstavec="$radek"
        else
          odstavec="$odstavec ${radek}"
        fi
      fi
    done
    
    # poslední odstavec nemusel být ukončen prázdným řádkem
    if [ -n "$odstavec" ]; then
      echo "$odstavec"
    fi
            
          

Příkazy a úkoly na cvičení