310 likes | 438 Views
Operačné systémy. Teoretické cvičenia II. Advanced C shell. Postup syntaktickej analýzy príkazového riadku csh. 0. Načítanie riadku
E N D
Operačné systémy Teoretické cvičenia II. Advanced C shell
Operačné systémy - I. Advanced C shell Postup syntaktickej analýzy príkazového riadku csh 0. Načítanie riadku 1. History substitution (interpretácia znakov '!' a '^') 1% ls /usr/include 2% set ifiles = `!!` set ifiles = `ls /usr/include` (história sa substituovala skôr ako príkaz) • set histchars = ""
Operačné systémy - I. Advanced C shell Parsing (pokr.) 2. Finding words (= reťazce oddelené medzerou, tabulátorom a znaky & | ; > < ( ) && || >> << (pokiaľ im nepredchádza \) Reťazec v úvodzovkách a oboch apostrofoch je ponechaný bez zmeny, aj keď obsahuje predošlé znaky.
Operačné systémy - I. Advanced C shell Parsing (pokr.) 3. Updating the history listVýsledkom predošlého kroku je oddelenie reťazcov (lexikálnych jednotiek) práve jednou medzerou. Upravený príkaz sa uloží do zoznamu príkazov, hoci v tejto chvíli ešte interpret nevie, či je príkaz správny.
Operačné systémy - I. Advanced C shell Parsing (pokr.) 4. Parsing the sequence of wordsAnalýza lexikálnych jednotiek na riadku prebieha v takomto poradí: 4.1. Quoting with ' and "(Obe citácie zabránia: filename expansion, redirection, bg execution, pipe character. Apostrofy (= single quotation mark) naviac bránia variable expansion a command substitution.)
Operačné systémy - I. Advanced C shell Parsing (pokr.) 4.2. Alias substitution 4.3. I/O redirection, background execution and pipe are recognized (but not processed yet).Presmerovanie sa týka iba posledného príkazu alebo skupiny v zátvorkách (). V pozadí sa však vykonáva celý príkazový riadok. C shell vylúči tieto špeciálne znaky zo zoznamu argumentov a poznačí si ich výskyt (použije ich v bode 5). 4.4. Variable substitutionSubstitúcia premenných sa uskutočňuje dosť neskoro - zdroj častých chýb.
Operačné systémy - I. Advanced C shell Parsing (pokr.) 4.5. Command substitutionV tejto chvíli vyvolá subshell a odovzdá mu príkaz, ktorý bol uzavretý v obrátených apostrofoch. Výsledok vloží na miesto pôvodného príkazu. 4.6. Filename expansion
Operačné systémy - I. Advanced C shell Parsing (pokr.) 5. Execute each command(Tu nastupuje interakcia s Unixom - ktoré programy treba vykonať, aké súbory použiť pre vstup a výstup) (5.1. Aliases - už boli dosadené v bode 4.2) 5.2. Built-in commands 5.3. External commands
Operačné systémy - I. Advanced C shell Skryté súbory • .meno • ls ls -a • * .* • (.* *)
Operačné systémy - I. Advanced C shell Skryté súbory (pokr.) • set nonomatch • ({.*,*}) • (`ls -a`)
Operačné systémy - I. Advanced C shell Prázdny adresár • set nonomatchset f = (*)if ("$f" == "*" && ! -e "$f") then echo prazdnyendif • if (`ls -a | wc -l` == 2) then echo prazdnyendif • find . -type d -links 2
Operačné systémy - I. Advanced C shell Premenné • set meno • unset meno • if ($?meno) ...
Operačné systémy - I. Advanced C shell Premenné prostredia • setenv prem hodnota • unsetenv prem • PATH, TERM, HOME - environment • path, term, home - C shell
Operačné systémy - I. Advanced C shell Ladenie skriptov • prepínače • -x • -v • #! /bin/csh -xv
Operačné systémy - I. Advanced C shell Špeciálne súbory • /dev/null • set u = usernamegrep $u /etc/passwd >& /dev/nullif ($status == 0) echo existuje
Operačné systémy - I. Advanced C shell Špeciálne súbory (pokr.) • set u = usernamegrep ^${u}: /etc/passwd >& /dev/nullif ($status == 0) echo existuje
Operačné systémy - I. Advanced C shell Špeciálne súbory (pokr.) • /dev/tty • echo -n "Heslo:" > /dev/ttyset h = "`head -1 /dev/tty`"echo $h
Operačné systémy - I. Advanced C shell Špeciálne súbory (pokr.) • /dev/stderr • /dev/stdout • /dev/stdin • /dev/fd/0/dev/fd/1… • echo "Error: '$file': popis" > /dev/stderr
Operačné systémy - I. Advanced C shell Globing expr. vs Regular expr. • globbing expression - shell • *, ?, [], … • regular expression - grep, awk, sed • .*, ., [],+, ^, $, … • a* --> , a, aa, aaa, … • a+ --> a, aa, aaa, …
Operačné systémy - I. Advanced C shell Citovanie s :q • set a = ("h 1" "h 2") set b = ($a)set c = ("$a")set d = ($a:q)echo $b[1] --> hecho $c[1] --> h 1 h 2echo $d[1] --> h 1
Operačné systémy - I. Advanced C shell AWK • programovateľný filter • awk [-Fx] 'program' [subor] ... • vstup • súbor -> riadky -> slová(záznamy) (polia) • program • podm1 {akcia1}podm2 {akcia2}...
Operačné systémy - I. Advanced C shell AWK (pokr.) • podmienky • /regular expr./ • $1 == "meno" • BEGIN • END • … • referencovanie vstupného riadku • $ $0, $1, $2, ...
Operačné systémy - I. Advanced C shell AWK (pokr.) • premenné • prem = "hodnota" • prem2 = prem • reťazec <--> číslo • interné premenné • NF • FS • …
Operačné systémy - I. Advanced C shell AWK (pokr.) • príkazy • print, … • riadenie • if, for, while, switch, … • funkcie • substr(retazec, od, kolko) • length(retazec) • index(retazec, podretazec) • …
Operačné systémy - I. Advanced C shell AWK (pokr.) • awk '{print NR, $0}' • awk 'NF > 5 {print}' • awk 'length() > 5 {c ++} \ END {print c}'
Operačné systémy - I. Advanced C shell AWK (pokr.) • set p = hodnota • awk '{print $p, $0}' - zle • awk '{print '"$p"', $0}' - zle • {print hodnota, $0} • awk '{print "'"$p"'", $0}'
Operačné systémy - I. Advanced C shell AWK (pokr.) • set p = hodnota • awk -v q=$p '{print q, $0}' • echo $p | awk '{print $0}'
Operačné systémy - I. Advanced C shell cut vs awk
Operačné systémy - I. Advanced C shell sed • neinteraktívny editor • vi --> ed --> sed • sed 's/regexp/string/' • sed 's/regexp/string/g'
Operačné systémy - I. Advanced C shell Prehľadávanie adresárov (basic) set dir = … set all = `find $dir -type f ` @ sum = 0 foreach f ($all ) @ sum = $sum + \ `ls -l $f | awk '{print $5}'` end
Operačné systémy - I. Advanced C shell Prehľadávanie adresárov (full) set histchars = "" set dir = … set all = "`find '$dir' -type f `" @ sum = 0 foreach f ($all:q) @ sum = $sum + \ `ls -l "$f" | awk '{print $5}'` end