UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED BASH recap, reguláris kifejezések Operációs rendszerek 9. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 1 / 12
BASH - függvények function [függvénynév] {[parancslista]} [függvénynév]() {[parancslista]} BASH-ban, a legtöbb programozási nyelvtől eltérően, a függvényeknek nincs visszatérési típusuk, visszatérési értékük sem lehet Létezik return itt is, azonban ezzel a függvény kilépési állapotát írhatjuk le (hasonló mint az exit) Az értékkel való visszatérést parancs behelyettesítéssel tudjuk elérni A függvény paraméterekkel való meghívása, valamint ezek használata hasonlóan történik, mint a shell script hívása és futtatása esetén Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 2 / 12
BASH - lokális változók Eddig láttunk már shell és környezeti változókat: környezeti változók minden shellből elérhetőek a shell változók csak az aktuális shellből láthatók Ezeken felül léteznek még ún. lokális változók is, melyek csak abban a blokkban elérhetőek, ahol definiálva lettek local kulcsszóval lehet definiálni Ha függvényen belül definiálunk ilyet, az csak a függvény törzsében lesz elérhető Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 3 / 12
BASH - függvények, lokális változók #! /bin/bash function osszead { local eredmeny=$(($1 + $2)) echo "$eredmeny" } osszeg=$(osszead 1 2) echo $osszeg os09_1.sh Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 4 / 12
BASH - tömbök [tömbnév]=([értéklista]) Definiáláskor nem kell megadni a maximális elemszámot Indexelni sem szükséges folyamatosan Az indexelés 0-től kezdődik [tömbnév][szám]: [szám]-adik elem elérési a tömbből ${[tömbnév][*]}: a tömb összes eleme ${#[tömbnév][@]}: a tömb elemszáma #! /bin/bash tomb=("alma" "körte" "barack") elemszam=${#tomb[@]} for (( i=0; i<$elemszam; i++ )) do echo "${tomb[${i}]}" done os09_2.sh Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 6 / 12
Miért BASH? BASH-on kívül léteznek más szkript nyelvek is hasonló feladatokra: Perl: https://hu.wikipedia.org/wiki/perl_(programozási_nyelv) Python: https://hu.wikipedia.org/wiki/python_(programozási_nyelv) BASH hátrányai: Nincs magasabb szintű adatszerkezet (láncolt lista, map, stb.), ezért adatbázis műveleteket nehézkesek Egy program megírása elbonyolódhat Bizonyos esetekben lassabb mint más nyelvek (pl: DASH) BASH előnyei: Sok helyen elérhető, ahol a fentiek nem Programokat össze tud kötni (pipeline) Kisebb programok hatékonyabbak Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 9 / 12
BASH, hol? Web telepítés Rendszer adminisztráció Automatikus biztonsági mentés Környezeti változók meglétének ellenőrzése Alkalmazás telepítő scriptek Adatfeldolgozás (data crunching) http://www.bashcookbook.com/bashinfo/ http://smarterware.org/2009/05/happy-birthday-todotxt-cli/ http://www.railstips.org/blog/archives/2009/02/02/bedazzle-yourbash-prompt-with-git-info/ Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 10 / 12
Reguláris kifejezések A reguláris kifejezés (regular expression, regexp, RE) egy szöveg bizonyos részére illeszkedik, ezzel segítve a mintakeresést, mintafeldolgozást Bár a filozófiájuk hasonló, de a reguláris kifejezéseket nem szabad összekeverni az állományneveknél használható mintákkal és mintaillesztő karakterekkel! Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 7 / 12
Grep szűrő grep [reguláris_kifejezés][állománynév]: Kiírja a megadott állomány mindazon sorait, amelyek illeszkednek a reguláris kifejezésre Ha nem adunk meg állományt, akkor a szabványos bemenetről olvas -c: Az illeszkedő sorok tartalma helyett csak azok száma jelenik meg -n: az illeszkedő sorok tartalma elé a sorszámukat is kiírja -o: a sorokból csak az illeszkedő részt jeleníti meg Gyakorlatban az egrep parancs használata ajánlott (ld. következő óra) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 8 / 12
Feladatok I Írj olyan bash scriptet amelynek egy bemeneti paramétere van, és addig olvassa be az aktuális könyvtárban lévő állományokat, amíg azok tartalmában meg nem találta a megadott paramétert. Ha ez megtalálható, akkor írja ki a fájl nevét, melyben először előfordult, valamint hogy hanyadik sorban találta meg a szöveget. Ha nem találta meg, akkor írja ki, hány fájlt nézett át. (os09_3.sh) Írj olyan scriptet, ami egy bemeneti paramétert vár: egy számot. Iteráljon végig az aktuális könyvtár elemein, és adja össze a közönséges állományok méretét. Ha ez az összesített méret meghaladja a paraméterben kapott számot, akkor az elkövetkező fájlokat másolja át egy "nagy" elnevezésű mappába, majd írja ki ezek nevét. Az implementáláshoz használj függvényt! (os09_4.sh) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 11 / 12
Feladatok II Írj olyan scriptet, ami -1 végjelig kér be számokat a billentyűzetről, ezeket összeadja, majd az eredményt kiírja a képernyőre. (os09_5.sh) http://www.spoj.com/problems/willitst/ *(WILLITST.sh) Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor 12 / 12