Büki András UNIX/Linux héjprogramozás
Büki András: UNIX/Linux héjprogramozás Büki András Felelõs kiadó a Kiskapu Kft. ügyvezetõ igazgatója 2002 Kiskapu Kft. 1081 Budapest Népszínház u. 29. Tel: (+36-1) 303-9119, 477-0443 Fax: (+36-1) 303-1619 http://www.kiskapu.hu/ e-mail: kiskapu@kiskapu.hu Sorozatszerkesztõ: Szy György Lektor: Rézmûves László Mûszaki szerkesztõ: Csutak Hoffmann Levente ISBN: 963 9301 10 8 Készült a debreceni Kinizsi Nyomdában Felelõs vezetõ: Bördõs János
Tartalomjegyzék 1. fejezet Alapelemek Helló világ: elsõ héjprogramunk...................................... 3 Változók használata............................................. 5 Idézõjelek használata, parancsbehelyettesítés......................... 8 Parancssori paraméterek......................................... 8 A szabványos be- és kimenet és ezek átirányítása...................... 9 Csövek...................................................... 11 A csatornák számozása és a hibacsatorna átirányítása.................. 13 Matematikai kifejezések kiértékelése : az expr parancs................. 15 Parancsvégrehajtás : az eval parancs............................... 18 A beágyazott dokumentum (here document)......................... 18 2. fejezet Programvezérlési szerkezetek Feltételes utasítás : if, test, && és............................... 23 Többszörös elágaztatás: a case szerkezet............................ 26 Ciklusszervezés : for, while és until................................ 28 Függvények.................................................. 33 3. fejezet Keresés, szûrés, szövegfeldolgozás, avagy a szabályos kifejezések lélektana Mire valók a szabályos kifejezések?................................... 39 A szabályos kifejezések alapelemei................................ 42 c (tetszõleges karakter)..................................... 42 \c....................................................... 42 ^........................................................ 43 $........................................................ 43......................................................... 43 [karakterek]................................................ 43 [^...]...................................................... 44 [c1-c2].................................................... 44 Jelentésmódosító jelek.......................................... 44 *........................................................ 44 +........................................................ 44 (...)...................................................... 45 {x} vagy {x,} vagy {x,y}........................................ 45 szabályos kifejezés 1. szabályos kifejezés 2...................... 46
vi UNIX/Linux héjprogramozás A szabályos kifejezések és a héj................................... 47 A szabályos kifejezések és a mosógép.............................. 49 Avagy hogyan írjunk szabályos kifejezéseket tartalmazó programot..... 49 4. fejezet A sed használata héjprogramokban A sed mûködési elve........................................... 55 A sed alapvetõ parancsai........................................ 57 p (Print).................................................. 57 d (Delete)................................................. 58 s (Substitute)............................................... 58 a (Append), i (Insert) és c (Change)............................. 62 y (Transform).............................................. 63 w (Write), r (Read).......................................... 64 n (Next), q (Quit)........................................... 65 Tizedespont, tizedesvesszõ...................................... 65 Készítsünk telefonkönyvet....................................... 68 5. fejezet Az AWK használata héjprogramokban Az awk mûködésének alapelvei................................... 77 A programok szerkezete és indítása............................. 77 Mezõk.................................................... 78 Kiíratás (print).............................................. 79 Felhasználó által megadott változók............................. 80 Kapcsolattartás a héjprogram és az awk program között............. 80 Belsõ változók............................................. 81 A mezõelválasztó karakterek kezelése........................... 82 Az AWK nyelvi elemei.......................................... 83 A BEGIN és END blokkok.................................... 83 Matematikai mûveletek....................................... 84 Feltételes utasítás........................................... 86 Beépített függvények........................................ 87 Ciklusok.................................................. 87 Fájlok kezelése............................................. 88 Összetett gyakorlatok........................................... 89 Telefonkönyv.............................................. 89 Kettes számrendszer......................................... 90 Átlagolás.................................................. 92 Névsor................................................... 94 Címlista és telefonkönyv összefésülése........................... 95 Egy sor, több sor............................................. 96
Tartalomjegyzék vii 6. fejezet A héjprogramok alapvetõ építõelemei A parancssori paraméterek és kapcsolók kezelése.................... 101 Parancssori paraméterek hiányának felismerése................... 101 Kapcsolók felismerése és fájl létezésének vizsgálata................ 102 Kapcsolók egybeírása....................................... 103 A getopts parancs.......................................... 106 Fájl típusának vizsgálata........................................ 107 A szabványos bemenet olvasása: szûrõként mûködõ héjprogram........ 108 Írás a képernyõre, olvasás a billentyûzetrõl......................... 110 Várakozás billentyû leütésére.................................... 113 Átmeneti fájlok kezelése....................................... 113 Jelek elfogása és kezelése...................................... 117 Zárolás..................................................... 121 Idõzített végrehajtás, várakozás.................................. 122 Önhívó parancsvégrehajtás teljes könyvtárszerkezetben............... 125 Az xargs parancs............................................. 127 7. fejezet Gyakorlatok I. Egyszerû feladatok.............................................. 133 Változatok egy témára: az angol ábécé betûi........................ 133 Feladat.................................................. 133 Elsõ megoldás............................................. 134 Ötletek.................................................. 134 A megoldás............................................... 135 Második megoldás......................................... 137 Ötletek.................................................. 137 A megoldás............................................... 137 Harmadik megoldás........................................ 138 Ötletek.................................................. 138 A megoldás............................................... 139 Negyedik megoldás........................................ 139 Ötletek.................................................. 139 A megoldás............................................... 140 A UNIX segédprogramok magyartudásának ellenõrzése.............. 141 Feladat.................................................. 141 Ötletek.................................................. 141 A megoldás............................................... 141 Tac..................................................... 142 Feladat.................................................. 142
viii UNIX/Linux héjprogramozás Ötletek.................................................. 143 A megoldás............................................... 143 Rev........................................................ 145 Feladat.................................................. 145 Ötletek.................................................. 145 A megoldás............................................... 145 Titkosítás................................................... 148 Feladat.................................................. 148 Ötletek.................................................. 148 A megoldás............................................... 148 Betûk megszámlálása.......................................... 150 Feladat.................................................. 150 Ötletek.................................................. 150 A megoldás............................................... 151 Digitális számok.............................................. 153 Feladat.................................................. 153 Ötletek.................................................. 153 A megoldás............................................... 154 Szavak keresése.............................................. 156 Feladat.................................................. 156 Ötletek.................................................. 156 A megoldás............................................... 156 Számábrázolási pontosság...................................... 159 Feladat.................................................. 159 Ötletek.................................................. 159 A megoldás............................................... 160 Csomagoljunk............................................... 160 Feladat.................................................. 160 Ötletek.................................................. 161 A megoldás............................................... 161 8. fejezet Gyakorlatok II. Segédprogramok................................................ 165 Igen vagy Nem?.............................................. 165 Feladat.................................................. 165 Ötletek.................................................. 165 A megoldás............................................... 165 Egyszerû menürendszer........................................ 167 Feladat.................................................. 167 Ötletek.................................................. 168
Tartalomjegyzék ix A megoldás............................................... 168 Interaktív parancsértelmezõ..................................... 170 Feladat.................................................. 170 Ötletek.................................................. 170 A megoldás............................................... 171 Számból szöveg.............................................. 174 Feladat.................................................. 174 Ötletek.................................................. 174 A megoldás............................................... 175 Telefonköltség kiszámítása...................................... 180 Feladat.................................................. 180 Ötletek.................................................. 180 A megoldás............................................... 181 Felhasználók bejelentkezésének figyelése.......................... 187 Feladat.................................................. 187 Ötletek.................................................. 187 A megoldás............................................... 187 Felhasználók lemezfoglalásának figyelése.......................... 190 Feladat.................................................. 190 Ötletek.................................................. 191 A megoldás............................................... 191 9. fejezet Tippek, trükkök Kiegészítés Bash-felhasználóknak................................... 201 Változó nem meghatározottá tétele.............................. 201 Parancsbehelyettesítések egymásba ágyazása....................... 203 A let parancs................................................ 204 Közvetett változóhasználat...................................... 205 Az üres parancs.............................................. 206 C stílusú megoldások.......................................... 207 Gyermekhéj és névtelen függvény használata....................... 209 Tömbök használata........................................... 211 Függelékek I. Függelék.................................................... 215 II. Függelék.................................................... 223 Tárgymutató.................................................... 229