25.5.2004

ZÁPOČTOVÝ TEST Z UNIXU

Filed under: school,Unix — nax @ 09:24

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.

Comments are closed.

Powered by WordPress