Z?POÄ?TOV? TEST Z UNIXU
U?ž je docela dost pozdÄ? a dnes byl na??tÄ?st? u?ž p??edposledn? dlouhat??nsk?? pondÄ?lek od (p??edn????ky a jedno cviÄen? – pr??vÄ? z unixu) od 7:30 do 19:30. Pravda, dnes jsme skonÄili asi o t??i ÄtvrtÄ? hodinku d???v, proto?že m?sto posledn? p??edn????ky se ve velk?Š posluch??rnÄ? K1 psal z??poÄtov?? test a ten byl jen na 40 minut (p??vodnÄ? ???kal ?že na 30 minut, ale trochu nastavoval).
Ten test byl – jak bych to jen ??ekl – ne zrovna ?ž??dn?? trivka. V linuxu u?ž dÄ?l??m nÄ?jak?? ten p??tek, ale s nÄ?kter??mi vÄ?cmi jsem mÄ?l docela probl?Šmy. Cel?? test byl na oboustrannÄ? potiskl?Š A4, p??iÄem?ž odpovÄ?Ä byla vÄ?t??inou jen p??r slov, maximum snad byl skript?k v awku na 3 ????dky. Ot??zky byly hlavnÄ? z p??edn????ek a vÄ?t??inou ne zrovna vÄ?ci na prvn? pohled z??ejm?Š.
No pravda – mohli jsme pou?ž?vat jakoukoli literaturu a sakra bylo zn??t, ?že jsem si vytiskl p??edn????ky a dop??edu jsem si dal program p??edn????ek (harmonogram z webu). Pak u ot??zky jako t??eba co znamenaj? promÄ?nn?Š prost??ed? a) ? b) * c) 1 d) $ nalistovat osmou p??edn????ku a napsat a) n??vratov?? k??d b) parametry c) prvn? parametr d) Ä?slo procesu pid.
PodobnÄ? sem ??e??il t??eba ot??zku: napi??te 4 p???kazy, kter?Š mus?te prov?Šst pro p??id??n? u?živatele bez pou?žit? p???kazu adduser (p??edn????ka 9, slajd 2) nebo ??prava p???kazu p1 | p2 tak aby p2 dost??val chybov?? v??stup p1 a standardn? v??stup p1 se zahazoval. V?ce m?ŠnÄ? jsem to p??esmÄ?rov??n? tu??il, ale v??bec jsem si nebyl jist?? jak maj? b??t na ????dce za sebou ty p??esmÄ?rov??n?. P??edn????ka 2 slajd 15 to na??tÄ?st? vy??e??il:
p1 2>&1 1>/dev/null | p2
P??esmÄ?rov??v??n? se toti?ž vyhodnocuje zleva do pr??va. Kdybych to udÄ?lal obr??cenÄ?, tak bych nejd???v sm?chal chybov?? v??stup s standardn?m a pak bych je oba zahodil.
Pak tam byly nÄ?jak?Š vÄ?ci co jsem dal z voleje, jako t??eba Ä?m shell nahrad? $HOME, *, $(date) a je??tÄ? cosi. Pak tam taky bylo napsat skript, kter?? vr??t? nejvy????? GID pou?žit?Š v passwd. J?? to ??e??il pomoc? awku (hlavnÄ? ?že jsem si ???kal, ?že pokud to jen bude mo?žn?Š budu se sna?žit awku vyhnout, proto?že jsem v nÄ?m nikdy nic po????dn?Šho nenapsal). UdÄ?lal jsem to takhle:
$ awk -F: ‘BEGIN{GID=0}
> { if (GID < $4) GID = $4}
> END{print GID+1}’ /etc/passwd
Pro ty, kdo by snad awk neznaly: parametr -F ud??v?? separ??tor sloupc??. Vzhledem k tÄ?mto separ??tor??m pak budou naplnÄ?ny promÄ?nn?Š $1 $2 $3 a mnou pou?žit?? $4 atd. Pokud si prohl?Šdnete passwd tak hned pochop?te proÄ. Sekce BEGIN se provede p??ed zpracov??n?m vstupu, dal??? sekce nen? nÄ?jak omezena p??edch??zej?c?mi regul??rn?mi v??razy nebo Ä?sly ????dk?? a tak je jimi zpracuj? v??echny ????dky co p??ijdou na vstup a sekce END se vykon?? a?ž po zpracov??n? v??ech ????dk??. Jak jednoduch?Š, ?že?
Na dal??? p???klady si u?ž nepamatuji a u?ž se mi kl??ž? kukadla, tak?že toho pro dne??ek nech??m. Tohle teÄ p???u na sv?Šm termin??lu a nem??m to tedy jak vlepit do blogu, tak?že to tam d??m z?tra.