# Úvod do UNIXu (SWI095x1h), poznámky k řešením úkolu k 8. cvičení,
# 2005-04-13
#
# $DevNullCZ: ukol-08.poznamky.txt,v 1.5 2005/04/22 23:10:44 jp Exp $
#

Tady je pár poznámek k řešením, která jsem od vás dostal.

(a) nepoužívejte středníky na konci řádku, jsou zbytečné a nepoužívá
se to.

# if [ -n "$1 "]; then
#   echo $1;
# fi;

(b) obecně je lepší nejdříve pouze zpracovat parametry, tj.
zapamatovat si, co mám udělat a pak teprve třeba v další "case"
struktuře dané věci provést. Díky tomu se mohu z kódu zpracování
parametrů, který je tak kratší, dovedět, co skript asi zhruba dělá.
Když rovnou i provádíte dané úkoly, není to tak přehledné.

tento příklad byl samozřejmě příliš triviální na to, aby se toto
nutně aplikovalo zde; vysvětluju princip.

další relevantnější důvod je ten, že někdy může jeden parametr
záviset na druhém (např. formát výstup závisí na použití/vynechání
parametru "-v" pro verbose), takže musíte zpracovat nejdříve všechny
parametry a teprve pak něco začít dělat. I kdyby tomu tak nebylo,
tak se může stát, že to bude potřeba později a museli byste ten
skript stejně přepsat.

(c) vložení mezery mezi jednotlivé znaky je jednoduché:

# echo aaa | sed -e 's/\(.\)/& /g'

případně:

# echo aaa | sed -e 's/\(.\)/& /g' | sed -e 's/ $//g'

(d) VŽDY používejte "#!/bin/sh" na první řádce skriptu. Jinak se to
při použití "./skript" pouští pod shellem, ve kterém jste (zde bash)
a ten není 100% kompatibilní s /bin/sh. Tady to nevadí, ale u
složitějšího skriptu byste se mohli dostat do problému.

Vím, že na (jen některých ?) distribucích linuxu je /bin/sh link na
bash. Osobně to považuju za hroznou prasárnu. Bash už mi hodněkrát
spadnul, /bin/sh nikdy a to jsem pracoval na mnoha různých unixových
systémech. Pokud třeba automaticky upravujete konfigurace na 100
cisco routerech rozesetých po celé republice, věřte mi, že vám z
pomyšlení na to, že to uprostřed slítne, půjde mráz po zádech.

(e) shellový skript by měl mít koncovku ".sh", případně může být bez
koncovky, ale určitě ne ".txt" nebo cokoli jiného.

(f) chápu, že někdy nemusíte přijít na řešení. Ale nechápu, že vám
nefunguje to, o čem si myslíte, že funguje, zvlášť u takhle
jednoduché věci. Navíc když stačí pastnout ty parametry, které byly
přímo v zadání úkolu, tj. třeba:

# ./xxx -n 3 -s abc europe africa

(g) vždy si váš program (úplně jedno jaký, v jakém jazyce napsaný
atd.) otestujte s chybným zadáním. Nelze spoléhat na to, že vstup
bude vždy korektní. Nebude. To je možná jediná jistota, kterou máte.

(h) pokud chcete mít moji reakci do dalšího cvičení, musíte mi to
poslat dřív než v úterý, to už to pravděpodobně do středy nestihnu.