Warning
This page is located in archive. Go to the latest version of this course pages.

Skriptovací jazyk BASH

Domácí příprava

Nastudujte syntaxi a základní příkazy skriptovacího jazyka BASH: bash

Zaměřte se zejména na:

  • přiřazení proměnné
  • zpracování argumentů
  • příkaz if a jeho použití + příkaz test
  • cykly for a while

Náplň cvičení

Cílem cvičení je seznámit se se skriptovacím jazykem BASH, pokročilejšími funkcemi příkazové řádky a dalšími nástroji operačního systému.

Zadání úlohy

Vytvořte bash skript, který:

  • bude číst řádky ze vstupu a pro každou řádku začínající řetězcem “FILE ” zkontroluje, zda existuje soubor jména následujícího za řetězcem “FILE ”
  • pro takové řádky pak skript vypíše:
    • FILE 'cesta/k/souboru' pocet_řádků_souboru '1._řádek_souboru' … pro platný běžný soubor
    • DIR 'cesta/k/adresari' … pokud se jedná o adresář
    • LINK 'cesta/k/symlinku' 'cesta/k/cilovemu/souboru' … pokud se jedná o symbolický odkaz (včetně neplatných odkazů). Cestu k cílovému souboru můžete zjistit příkazem readlink bez přepínače.
    • ERROR 'cesta/k/souboru' … pokud soubor neexistuje (nebo se nejedná o jeden z předchozích případů) na standardní chybový výstup
  • cesty k souborům na vstupu mohou být jak relativní, tak absolutní. Výstup skriptu bude obsahovat cesty tak, jak byly na vstupu.
  • všechny ostatní řádky skript ignoruje
  • dodržujte předepsané formátování výstupu kvůli auto-evaluaci (včetně apostrofů)
  • skript bude mít 4 nepovinné přepínače: -h, -v, -z a -n
    • přepínač -h vypíše stručnou nápovědu ke skriptu (a ukončí skript)
      • opakuji: stručnou! neopisujte tam prosím zadnání úlohy!
    • přepínač -v na konci běhu vypíše počet platných souborů, adresářů a odkazů (v tomto pořadí, vždy jeden údaj na řádek), např.:
      12
      5
      3
    • přepínač -z na konci zabalí všechny platné soubory (symlinky ne) do .tar.gz archivu s názvem 'output.tgz'. K vytvoření archivu použijte příkaz
      tar czf output.tgz file1 file2...
    • přepínač -n změní formát výstupu tak, že mezi řetězec FILE/DIR/LINK a cestu se vloží aktuální počet souborů (pořadí) resp. adresářů/symlinků (každý typ se čísluje zvlášť)
      • výstup pro druhý nalezený soubor pak může vypadat např.:
        FILE 2 '/home/ja/soubory/dokument.txt' 32 'Hello World'
    • pořadí přepínačů může být libovolné
    • při zadání libovolného jiného přepínače by měl skript skončit chybou
  • návratová hodnota skriptu je
    • 0 pokud vše dopadne dobře a nejsou zadány žádné chybné cesty
    • 1 pokud vstup obsahuje nějaké chybné cesty (tj. výstup obsahuje alespoň jeden řádek začínající ERROR)
    • 2 pokud nastane závažná chyba (špatné argumenty, chyba při vytváření archivu, chyba při čtení souboru apod.). Při zjištění chyby této kategorie skript ihned skončí.

Při psaní skriptu se řiďte běžnými programátorskými zásadami, aby byl skript efektivní, jednoduchý (nekompikovaný), přehledný a snadno pochopitelný.

Skript nahrajte do odevzdávacího systému, který jej automaticky zkontroluje jeho základní funkčnost. Výsledné body budou připsány cvičícím po následné manuální kontrole. (To znamená, že nám prosím nepište, pokud skript projde všemi testy a vy v brute stále vidíte u úlohy 0 bodů!)

Ladění úlohy v odevzdávacím systému

Automatický vyhodnocovací skript nekontroluje standardní chybový výstup, ale při detekci problému vám zobrazí vše, co bylo na chybový výstup posláno. Toho se dá využít k ladění skriptu:

  1. Příkaz
    set -x
    způsobí, že se na chybový výstup vypíše každý následující příkaz, který bash vykoná.
  2. Můžete si tam vypisovat i vaše poznámky. Např:
    echo "Ctu radku '$line'" >&2
  3. Specificky k této úloze: při ladění pozor, abyste nevypsali řádky “ERROR 'nejaky-retezec-v-apostrofech'” - to by se pletlo s očekávaným výstupem skriptu na stderr

Materiály

Domácí příprava na další cvičení

Nastudujte nástroje pro zpracování textu a použití regulárních výrazů: text

courses/b4b35osy/cviceni/cviceni2_bash.txt · Last modified: 2017/10/12 09:10 by chudobj