Upload
nelia
View
99
Download
0
Embed Size (px)
DESCRIPTION
Operačné systémy. Teoretické cvičenia II. Advanced C shell. Postup syntaktickej analýzy príkazového riadku csh. 0. Načítanie riadku - PowerPoint PPT Presentation
Citation preview
Operačné systémy
Teoretické cvičenia
II. Advanced C shell
Operačné systémy - I. Advanced C shell 2
Postup syntaktickej analýzy príkazového riadku csh
0. Načítanie riadku
1. History substitution (interpretácia znakov '!' a '^')
1% ls /usr/include2% 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 3
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 4
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 5
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 6
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 7
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 8
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 9
Skryté súbory
• .meno• ls ls -a• * .*
• (.* *)
Operačné systémy - I. Advanced C shell 10
Skryté súbory (pokr.)
• set nonomatch
• ({.*,*})
• (`ls -a`)
Operačné systémy - I. Advanced C shell 11
Prázdny adresár• set nonomatchset f = (*)if ("$f" == "*" && ! -e "$f") then
echo prazdnyendif
• if (`ls -a | wc -l` == 2) thenecho prazdny
endif
• find . -type d -links 2
Operačné systémy - I. Advanced C shell 12
Premenné
• set meno• unset meno• if ($?meno) ...
Operačné systémy - I. Advanced C shell 13
Premenné prostredia
• setenv prem hodnota• unsetenv prem
• PATH, TERM, HOME - environment
• path, term, home - C shell
Operačné systémy - I. Advanced C shell 14
Ladenie skriptov
• prepínače– -x– -v– #! /bin/csh -xv
Operačné systémy - I. Advanced C shell 15
Špeciálne súbory
• /dev/null
• set u = username
grep $u /etc/passwd >& /dev/null
if ($status == 0) echo existuje
Operačné systémy - I. Advanced C shell 16
Špeciálne súbory (pokr.)
• set u = username
grep ^${u}: /etc/passwd >& /dev/null
if ($status == 0) echo existuje
Operačné systémy - I. Advanced C shell 17
Š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 18
Š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 19
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 20
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 21
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 22
AWK (pokr.)
• podmienky– /regular expr./– $1 == "meno"– BEGIN– END– …
• referencovanie vstupného riadku– $ $0, $1, $2, ...
Operačné systémy - I. Advanced C shell 23
AWK (pokr.)
• premenné– prem = "hodnota"– prem2 = prem– reťazec <--> číslo
• interné premenné– NF– FS– …
Operačné systémy - I. Advanced C shell 24
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 25
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 26
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 27
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 28
cut vs awk
Operačné systémy - I. Advanced C shell 29
sed
• neinteraktívny editor
• vi --> ed --> sed
• sed 's/regexp/string/'• sed 's/regexp/string/g'
Operačné systémy - I. Advanced C shell 30
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 31
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