# Úvod do UNIXu (SWI095x1h), 8. cvičení, 2005-04-03
# SU1, Malá Strana, MFF UK
#
# Řešení jsou odladěná na FreeBSD 4.11-RELEASE, případné konkrétní
# situace se týkají stroje mail.kolej.
#
# $DevNullCZ: cviceni-08.reseni.txt,v 1.1 2005/04/13 16:28:50 jp Exp $
#

#---------------------------------------------------------------------
# signály, procesy
#---------------------------------------------------------------------

(sp1) dodatek k minulému cvičení, obsluha signálů v shellu, POSIX,
"-T" option (FreeBSD specific), ...


#---------------------------------------------------------------------
# proměnné, systémové proměnné
#---------------------------------------------------------------------

(v1) $$, $?, $!, $0, $#, $n, shift, ...


(v2) jednoduchý skript, který vypíše první tři parametry na
příkazové rádce. Test na to, jak se chová, zadají-li se parametry
jako:

1 2 3
"1" "2" "3"
"1" " " 2 3
"1 2" 3
1\ 2 " " 3
'1 2 3'
...atd.

(v3) lehký úvod do quotingu; dvojité uvozovky, jednoduché uvozovky,
backslash; backslah ve dvojitých uvozovkách, dvojité uvozovky v
jednoduchých, naopak, atd. atd. Jak vypsat doslova 12'4"$\89



#---------------------------------------------------------------------
# kombinace příkazů
#---------------------------------------------------------------------

(kp1) pajpa, středník, &&, ||, { xxx; }, ( xxx ) a příklady na ně;
na příkladu vysvětlen rozdíl mezi "()" a "{}"


(kp2) více informací o "||" a "&&", složitější kombinace, priorita
operátorů, ...


(kp3) napište příkaz, který vytvoří adresář "aaa" a pokud se to
podaří, vytvoří v něm prázdný soubor "bbb"; pokud se vytvoření
souboru "bbb" nepodaří, vypiš chybovou hlášku. Pokud se adresář
"aaa" nepodaří vytvořit, příkaz skončí (tj. i kdyby už adresář
existoval".


(kp4) napište příkaz, který pokud slovo v proměnné "word" je
obsaženo v souboru "/etc/passwd", vypíše "ok", jinak "false".


#---------------------------------------------------------------------
# řídící struktury
#---------------------------------------------------------------------

(rs1) if-then-else-fi; while-do-done; case-esac; for-do-in-done;
různé formy zápisu (každé z rezervovaných slov na samostatné řádce,
celý zápis na jednu řádku); jejich návratová hodnota jako návratová
hodnota posledního příkazu; spojování těchto příkazů přes pajpu


(rs2) napište příklad (kp4) pomocí konstrukce "if-then-else"


(rs3) read a while cyklus;
napište while cyklus, který projede všechny řádky /etc/passwd a
každou řádku pouze vypíše


(rs4) break; continue a příklady na ně. Například vypisujte ve for
cyklu zadanou posloupnost čísel a pokud v daném čísle není dvojka,
vypište ho dvakrát. Pokud tam je, vypište dané číslo jen jednou.
Další příklad - modifikace předchozího - vypisujte zadaná čísla a
pokud narazíte na dvojku ve vstupu, ukončete cyklus.


(rs5) napište while cyklus, který projede všechny řádky z
/etc/passwd a pokud bude daný řádek obsahovat slovo z proměnné
"word", tak ukončete cyklus a vypište "ok". Nic jiného příkaz nesmí
vypsat.



(rs6) řídíci struktura "case"; ukázky jednoduchého použití


(rs6) case; ukázky složitějšího použití.