1 / 43

Operációs rendszerek

Operációs rendszerek. Segédprogramok, szűrők. A mai program. Hasznos, vegyes segédprogramok test, expr, read; startup programok Rekurzió Alapfogalmak szűrőkhöz A cut, head, tail, grep szűrők Reguláris kifejezések Az awk szűrő. Jó dolog a test parancs!. Két szintaxisa is van:

von
Download Presentation

Operációs rendszerek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Operációs rendszerek Segédprogramok, szűrők

  2. A mai program • Hasznos, vegyes segédprogramok • test, expr, read; startup programok • Rekurzió • Alapfogalmak szűrőkhöz • A cut, head, tail, grep szűrők • Reguláris kifejezések • Az awk szűrő Vadász

  3. Jó dolog a test parancs! • Két szintaxisa is van: test kifejezes [ kifejezes ] • Szemantika: Normális (igaz) visszatérési értéke van, ha a kifejezés (szemantikailag) igaz! • A kifejezés lehetőségeknek 2 csoportja van: • Fájlokkal kapcsolatos tesztek, • adatszerkezetek relációi. Vadász

  4. Fájlokkal kapcsolatos tesztek Csak néhány példa, test -f file test -d file test -r file test -s file stb. az első szintaxissal # file létezik és sima fájl # file létezik és jegyzék # file létezik és olvasható # file létezik és 0-nál hosszabb Vadász

  5. Adatrelációk Példák itt is, [ ertek1 -gt ertek2 ] [ ertek1 -eq ertek2 ] stb. [ s1 = s2 ] [ s1 > s2 ] stb. [ -z s1 ] [ -n s1 ] [ s1 ] Igaz, ha # algebrailag nagyobb # algebrailag egyenlő # szövegként egyenlő # szövegként nagyobb # s1 füzér hossza 0 # s1 füzér hossz nem 0 # s1 füzér nem a null füzér Vadász

  6. Jó dolog az expr parancs Szintaxisa: expr kifejezes expr kif1 op kif2 Pl.: sum=0 sum=`expr $sum \+ 1` echo $sum Szemantika: Kiértékelődik a kifejezés és az eredmény az stdout-ra íródik. Vannak algebrai operátorok, zárójelezés lehetséges. Semlegesítés! Itt parancsbehelyettesítés! Vedd észre fehér karaktereket! Vadász

  7. bell burokprogram n=${1-1} # mindenképp 1 while [ $n -gt 0 ] do echo -n \7 # sípol n=`expr $n - 1` # csökkenti n-et sleep 1 # alszik 1 sec-t done ---------------------- Így hívd: $ bell 3 # hármat sípol Vadász

  8. Rekurzió lehetséges • Pl. a HOME-ban van egy rek shell program: --------------------------------------------------- cd $1 ; ls -l # és ha $1 nem jegyzék? for i in * do if test -f $i # ez nem a legjobb! then : # do-nothing parancs else $HOME/rek $i fi done --------------------------------------------------- Így hívom: $ rek dir Vadász

  9. A read parancs read valt1 valt2 ... Beolvas egy sort az stdin-ről, és az első szót a valt1-be, másodikat valt2-be s.í.t. teszi. Ha több szó, mint változó: az utolsóba a maradék szavak listája. Információátadás a sh-nek: paraméterekkel, exportált változóval, fájlokkal, read paranccsal Vadász

  10. Tanácsok 1 • Szabályozzuk, hogy bármi is az interaktív burkunk, a bourne shell dolgozza fel burokprogramjainkat! • Ha az első sor • nem kommentár: az sh dolgozik, • #!/bin/sh akkor is az sh dolgozik, • #!/bin/ksh akkor a Korn shell dolgozza fel, • #/bin/bash akkor a Bourne again shell, • #/bin/csh akkor a c-shell, • ezektől eltérő kommentár: az interaktív shell! Vadász

  11. Tanácsok 2 • Tanulmányozzuk a login/burokindítási startup programokat! Sajátjainkat “igazítsuk“! • Vannak “rendszer-széles“ és “saját” startup-ok! Sorrend! • Fogalmak • Bejelentkezési burok (login shell) • Interaktív burok (tartozik hozzá konzol terminál) • Nem interaktív burok • Ahol van, a /etc/environment –beli definíciók bekerülnek a környezetbe Vadász

  12. Tanácsok 2 • Login sh, bash, ksh • rendszerszéles: /etc/profile • saját: ~/.bash_profile # csak bash • saját: ~/.bash_login # csak bash • saját: $HOME/.profile • Interaktív bash (rshd daemonnal indított is) • Saját: ~/.bashrc • Nem interaktív bash • $BASH_ENV • POSIX interaktív (bash, ksh) • $ENV • TC shell burokindítási és login • rendszerszéles: /etc/cshrc • saját: ~/.cshrc ~/.login Vadász

  13. Tanácsok 3 • Tanulmányozzák, mi hol található! Vannak konvenciók! • Jó összefoglalás a Bartók-Laufer könyv 72. oldalán. Vadász

  14. A szűrők • Szabványos bemenetüket olvassák • azt szöveg-folyamnak tekintik, ami • sorvég karakterekkel sorokra tagolt. A sorokat így értelmezik. • Argumentumban is lehet a szabványos bemenet megadva. • A szabványos kimenetükre teszik a "szűrt" (átalakított) eredményüket. Vadász

  15. Alapfogalmak a szűrőkhöz • A sor/rekord (line) • A mező, szó (field, word) • A mezőelválasztó karakter (field separator) • a fehér karakterek gyakran alapértelmezés szerintiek, • gyakori a : (colon) mezőelválasztó. • Egyes segédprogramokban beállíthatók. • Néha értelmezett a blokk. • Mindig a karakter. Vadász

  16. A cut szűrő • A bemenet (file) sorainak kijelölt mezőit (táblázatok oszlopait) kivágja, és csak ezeket továbbítja • > cut -clist [file] • > cut -flist [-dchar] [-s] [file] • ahol list vessző-szeparált növekvő mezőszámok, tartományok. • -clist: oszlop-pozíciók. Pl. -c3,14-72 kivágja a 3. és a 14-72 pozíciókat. • -flist: mezőelválasztókkal (default=tab) szeparált mezőket azonosít, ahol is megadható az elválasztó: • -dchar argumentummal. • -s elnyomja a mezőelválsztó nélküli sorokat. Vadász

  17. A cut szűrő, példák > cut -d: -f1-5 /etc/passwd # az első 5 mező # a passwd fájlból > name=`who am i | cut -f1 -d” ”` # login név a name-ba > cut -c2-3,5,7,38-54 myfile.txt # oszlopszámok szerint Vadász

  18. A head és tail szűrők > head [-count][file] > tail [+-numb lbcr][file] > tail [-lbcr][file] > tail [+numb lbcf][file] > tail [-lbcf][file] # az első count sorát # +numb elejétől számított, # -numb végétől számított # adott sor (l), blokk (b), char (c). # -r startpont a fájl vége, nem számít az előjel és fordított sorrendű az l, b, c. # -f follow opció: ha nem csőbe szűr, másolás után blokkolódik, várva, hogy még hozzáfűznek. Pl.: $ tail +5 vmi | head -1 # kiírja a vmi 5. sorát Vadász

  19. A grep család (grep, fgrep, egrep) > grep [opciok] minta [fájl-lista] Szemantika: olvassa a fájl-lista fájljainak sorait. Minden sorra illeszti a mintát. Ha találat van: kiírja azt a sort. Visszatér: 0 - normális, ha találat van, 1 - ha nincs egyetlen találat sem, 2 - ha akadály van. Opciók: -n # kiírja a sorszámokat is, -v # nem egyezést keres, -y # kis/nagybetűt megkülönböztet, -c # csak a sorszámot írja ki. Vadász

  20. A szabályos kifejezések (Regular expressions) Sok szűrő (grep, awk, ed, lex stb) használja keresési mintaként.Különböztessük meg a fájlnév behelyettesítési mintától! Bartók-Laufer 107. oldal, Kernighan-Pike 335. oldal. A szabályos kifejezés (regex) szöveg, ami illeszkedik szövegre. Bennük bizonyos karaktereknek speciális jelentésük van , ezek a metakarakterek. Metakarakterek: újsor . [ ] ^ $ * | ( ) A regex elemek: atom, lezárt, összefűzött és unió. Vadász

  21. A regex elemek: atom Atom: kerek zárójelek közötti regex (regex), vagy alábbiak egyike Vadász

  22. A regex elemek: lezárt • Lezárt: olyan atom, amit opcionálisan egy postfix operátor követ (ebből: az atom degenerált lezárt) atom* az atomnak nulla vagy több előfordulására illeszkedik atom+ az atomnak egy vagy több előfordulására illeszkedik atom- az atomnak nulla vagy egy előfordulására illeszkedik Vadász

  23. Regex elemek: összefűzött • Az összefűzött akárhány egymás utáni lezártból áll. • Először a első, utána a második s.í.t. lezárt illeszkedésekor az összefűzött is illeszkedik. • Miután akárhány lezárt alkothat összefűzöttet, a lezárt degenerált összefűzött Vadász

  24. Regex elemek: unió • Akárhány összefűzött, melyeket a | karakter választ el • Illeszkedésnél választási lehetőséget ad: akár az első, akár a második s.í.t összefűzött illeszkedésénél az unió illeszkedik Vadász

  25. Az illeszkedési példák abcd összefűzött karakterek önmagukra illeszkednek ^string összefűzött string a sor elején illeszkedik string$ összefűzött string a sor végén illeszkedik [...] atom, illeszkedik a ... közül egyetlen karakterre [^...] atom, bármely, egyetlen kar., ami nincs a ...-ban [a-z] [0-9] atom, egyetlen bezárt karakterre a tartományból [^A-D0-2] több tartomány és negáció lehetséges Vadász

  26. Az illeszkedés c* [...]* lezárt, illeszkedik 0 v. több előfordulására c-nek c+ lezárt, illeszkedik 1 v. több előfordulására c-nek c? lezárt, illeszkedik 0 v. 1 előfordulására c-nek [.]* lezárt, bármilyen füzér .* lezárt, bármilyen füzér, akár üres is ^$ összefűzött, csak üres sorra illeszkedik ^[0-9]*$ csak számokat tartalmazó sorra illeszkedik Az awk-ban további lehetőségek is vannak! Vadász

  27. Fájlnév-minta kontra reguláris kifejezés • Mindkettő minta, mindkettő illeszkedik, de az • egyik fájlnevek terére illeszkedik és fájlnév listára helyettesítődik be; • a másik szövegsorokra illeszkedik és akció következik be. • A burok a metakaraktereket kezeli: operátornak veszi őket, fájlnév behelyettesítő mintáknak stb. • Vannak közös „dzsókerek”. A reguláris kifejezéseket “el kell juttatni“ a szűrőkhöz. Semlegesíteni kell, nehogy a burok kifejtse azokat! • Ne feledkezzünk meg erről! Sok bosszúságot takaríthatunk meg! Vadász

  28. Gyakori vizsgálat: val csak számokat tartalmaz? if echo $val | grep ‘[^0-9]’ > /dev/null then echo ‘ez nem numerikus’ else echo ‘ez tisztan numerikus’ fi Mit csinál ez? $ ls -l *txt # hosszú lista a txt-re végződő fájlokról Hosszú listát kérünk a nem txt-re végződőkről: $ ls -l | grep -v ‘txt$’ A sort szűrő Rendez. Nézz utána! Vadász

  29. Az awk, nawk szűrő • Mintakereső és feldolgozó. Szövegfolyam sorokat olvas, minden sorban mintákat keres és a mintákhoz tartozó akciókat végrehajtja. • Szintaxis: > awk [-Fc][program][parameterek][fájl-lista] • Szemantika: beolvassa a sorokat. A sorok szavait rendre az 1, 2, stb. nevű változóiba teszi. Soronként illeszt a programban megfogalmazott minden mintát, és ha találat van, végrehajtja a mintákhoz tarozó akciókat a sorra. A mintamegadásban, az akciókban használhatja az $1, $2 stb. változótartalmakat, egyéb belső változóit is. Vadász Aho-Weinberger-Kerighan

  30. Az awk program • Formája: [minta] {akciók} [minta ] {akciók} ... • Megjelenhet literálisan: awk ‘program’ • vagy szövegfájlban: awk -f fájlnév • Az akciók: C-szerű utasítások, utasításblokkok. > who | awk ‘{print $3 $4 $5 $1 $2}’ # nincs minta Vadász

  31. Az awk akciók if (feltétel) utasítás [else utasítás] while (feltétel) utasítás for (kif1; kif2; kif3) utasítás break, continue {utasítás; utasítás; ...} printf formátum, kifejezéslista print kifejezéslista for (name in array) utasítás next exit C szerű awk szerű Vadász

  32. Az awk minták • Legtöbbször reguláris kifejezések. Pl: ’/^Valami/ {print ”Megtalaltam sor elejen Valami-t.”}’ • Üres minta minden sorra illeszkedik. Pl.: ‘{print “Minden sorra kiirodik ez”}’ • Lehet a sor szavainak relációja is: ’$2==”valami” {print ”megtalaltam valami-t a 2. mezoben”}’ • Vannak speciális awk minták: BEGIN # az első sor előtt illeszkedik END # az utolsó sor után illeszkedik Vadász

  33. Hangsúlyozom • A grep-ben egyetlen minta van, • az awk-ban több is. • A grep mintája minden sorra illesztendő, és találatkor ki/nem kiírni a sort. • Az awk-ban minden minta a leírt sorrendben minden sorra illesztendő, találatkor a mintához tartozó akció végrehajtandó. • Az awk-ban a BEGIN és az END nem utasítás zárójelek, hanem minták! Különlegesen illeszkednek! Vadász

  34. Feladat: a második szó üres $2 == ““ $2 ~ /^$/ $2 !~ /./ length($2) == 0 NF < 2 A 2. mező üres A 2. mező egyezik az üres karakterlánccal A 2. mező semmilyen karakterrel nem egyezik A 2. mező hossza nulla (Az eddigiek bármilyen változóra is!) A mezőszám kisebb, mint kettő (Ez csak a 2. szóra!) Vadász

  35. Néhány awk változó • $1, $2 stb. a szavak. A $0 pedig az egész sor! • FS a mezőelválasztó karakter • NF a mezőszám az aktuális sorban • NR az aktuális sor sorszáma • RS az input sorok elválasztó karaktere • FILENAME az aktuális input fájl neve • stb. • továbbá az awk programokban a felhasználó által definiált változók Vadász

  36. Példák • Számláljuk az input sorait (kicsit erőltetetten!) awk ’ BEGIN {s=0} /* inicializálunk */ {s=s+1} /* minden sorra! */ END {print ”osszeg: ”, s} /* kiírunk */ ’ • Írjuk ki a passwd fájl 5. sorát! awk ’NR==5 {print $0}’ /etc/passwd • Írjuk ki a neveket, a gid-eket formázva! awk -F: ’{printf ”%8s %4s\n”, $1, $4}’ /etc/passwd awk ’BEGIN {FS=”:”} {printf ”%8s %4s\n”, $1, $4}’ /etc/passwd Vadász

  37. Az awk operátorok ++ -- * / % + - < <= > >= == != ~ !~ ! && || = += -= *= /= %= pre/postfix inkrem. dekrem. multiplikatív operátorok additív operátorok kar.lánc összekapcs (a semmi op.) relációs op. ~ az egyezés operátora negáció logikai és logikai vagy értékadó operátorok Vadász

  38. Az awk beépített függvényei sqrt(), log(), exp(), int() matematikai függvények length(string) string hosszát visszaadó substr(s,m,n) s-ből m-től n-hosszan substringet index(s,t) s-ben t első előfordulásának indexe Linuxon csak a nawk-val: > nawk -v valt=shell_kif ’prog’ infile Egyébként: > awk valt=kif ’prog’ infile Néha kellene: shell változó értéketjutassunk az awk-ba! Vadász

  39. Példák • A PATH környezetváltozó: PATH=vmi:vmi1:vmi2 >set | awk ’BEGIN {FS=”:”} /PATH/ {for(i=1;i<=NF;i++) print $i }’ > echo $PATH | awk ’BEGIN {FS=”:”} {i=index($0, ”=”); print substr($1,i+1, length($i)-i); for(i=2;i<=NF; i++) print $i; }’ Vadász

  40. Változók, tömbök az awk-ban Eddig: $1,…, NR, NF stb. Saját változó definiálható: valt ertekado_op kifejezes Pl: x = $2 * 15; Tömbváltozó definíció: t_name[konst_kif] ert_op kif Pl: sum[$1] = 0; Figyelem! Az indexkifejezés nem feltétlenül numerikus! Hivatkozás rá: valt print x; Hivatkozás rá: t_name[kif] sum[mary] Vadász

  41. Egy példa Van egy szovegfájlunk: joe 200 mary 400 joe 400 john 300 susie 500 mary 200 Van egy awk programunk: {sum[$1] += $2} END {for (name in sum) print name, sum[name] } Így hívjuk meg: > awk -f prog szoveg 4 tömbelem definiálódott! Vadász

  42. Az előző példához magyarázat sum[joe] sum[mary] sum[john] sum[susie] Az első akció minden sorra végrehajtódik. Csak 4 tömbelem definiálódik. A 2. akció a végén hajtódik végre. Különleges for ( ... in ...) ciklus! A ciklusban a name változó felvesz minden lehetséges index értéket! Most már megmagyarázhatod, mit is csinál a program! Vadász

  43. Operációs rendszerek Segédprogramok, szűrők Vége

More Related