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)
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ů!)
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:
Příkaz
set -x
způsobí, že se na chybový výstup vypíše každý následující příkaz, který bash vykoná.
Můžete si tam vypisovat i vaše poznámky. Např:
echo "Ctu radku '$line'" >&2
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