31
Operačné systémy Teoretické cvičenia II. Advanced C shell

Operačné systémy

  • 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

Page 1: Operačné systémy

Operačné systémy

Teoretické cvičenia

II. Advanced C shell

Page 2: Operačné systémy

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 = ""

Page 3: Operačné systémy

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.

Page 4: Operačné systémy

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.

Page 5: Operačné systémy

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.)

Page 6: Operačné systémy

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.

Page 7: Operačné systémy

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

Page 8: Operačné systémy

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

Page 9: Operačné systémy

Operačné systémy - I. Advanced C shell 9

Skryté súbory

• .meno• ls ls -a• * .*

• (.* *)

Page 10: Operačné systémy

Operačné systémy - I. Advanced C shell 10

Skryté súbory (pokr.)

• set nonomatch

• ({.*,*})

• (`ls -a`)

Page 11: Operačné systémy

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

Page 12: Operačné systémy

Operačné systémy - I. Advanced C shell 12

Premenné

• set meno• unset meno• if ($?meno) ...

Page 13: Operačné systémy

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

Page 14: Operačné systémy

Operačné systémy - I. Advanced C shell 14

Ladenie skriptov

• prepínače– -x– -v– #! /bin/csh -xv

Page 15: Operačné systémy

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

Page 16: Operačné systémy

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

Page 17: Operačné systémy

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

Page 18: Operačné systémy

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

Page 19: Operačné systémy

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, …

Page 20: Operačné systémy

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

Page 21: Operačné systémy

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}...

Page 22: Operačné systémy

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, ...

Page 23: Operačné systémy

Operačné systémy - I. Advanced C shell 23

AWK (pokr.)

• premenné– prem = "hodnota"– prem2 = prem– reťazec <--> číslo

• interné premenné– NF– FS– …

Page 24: Operačné systémy

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)– …

Page 25: Operačné systémy

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}'

Page 26: Operačné systémy

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}'

Page 27: Operačné systémy

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}'

Page 28: Operačné systémy

Operačné systémy - I. Advanced C shell 28

cut vs awk

Page 29: Operačné systémy

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'

Page 30: Operačné systémy

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

Page 31: Operačné systémy

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