6. BASH programozás I.

Hasonló dokumentumok
1. Alapok. #!/bin/bash

Szkriptnyelvek. 1. UNIX shell

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

BASH SCRIPT SHELL JEGYZETEK

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED


Operációs rendszerek. 4. gyakorlat. BASH bevezetés, script írása, futtatása UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

chmod umask chown, chgrp

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

BASH script programozás II. Vezérlési szerkezetek

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

További vezérlő valamint számításokat megkönnyítő szerkezetek

Bevezetés az informatikába, második gyakorlat. Bevezetés Környezetváltozók és néhány egyszerű utasítás Jogosultságok Fájlkezelés

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Pere László Linux: felhasználói ismeretek I. Az alapok

7. Laboratóriumi gyakorlat, 1. rész : Vezérlési szerkezetek II.

Első kötprog március 27 23:59:59 5 Első zh március Midterm április Második kötprog május 1 23:59:59 5 Második zh május

Lekérdezések az SQL SELECT utasítással

S z á m í t ó g é p e s a l a p i s m e r e t e k

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

További vezérlő valamint számításokat megkönnyítő szerkezetek

BEKÉRT ADAT KÉPERNYŐRE ÍRÁSA KÖRNYEZETI VÁLTOZÓK FÁJL REDEZETT KIÍRÁSA KÖNYVTÁRBAN BEJEGYZÉSEK SZÁMA FÁJLBAN SZÁM NÖVELÉSE. #!

Operációs Rendszerek II. labor. 2. alkalom

Operációs Rendszerek gyakorlat

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

AWK programozás, minták, vezérlési szerkezetek

Linux alapok. Parancsok általános alakja parancs kapcsolók paraméterek

Operációs Rendszerek gyakorlati jegyzet

AWK programozás Bevezetés

AWK programozás, minták, vezérlési szerkezetek

Operációs rendszerek 2 1. óra: Linux alapok Ismétlés. Windisch Gergely félév

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Rendszerprogramozás Linux környezetben

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Operációs rendszerek gyak.

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Operációs rendszerek 1.

SZÁMÍTÁSOK A TÁBLÁZATBAN

Programzás I gyakorlat

Operációs rendszerek gyak.

Alapfogalmak a héj (shell) használatához

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Bevezetés a programozásba

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Készítette: Nagy Tibor István

Operációs Rendszerek. Windows Parancssor

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

A legfontosabb DOS parancsok

Webprogramozás szakkör

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Szoftvertervezés és -fejlesztés I.

Youtube videó letöltés és konvertálás Linuxon

Occam 1. Készítette: Szabó Éva

Az állományok kezelésére használt fontosabb parancsok

C programozási nyelv

Számítógép Architektúrák. 4. Gyakorlat

Unix-Linux alapok I. gyakorlatvezető: Lutár Patrícia

BATCH Programozás. Tartalomjegyzék

Aritmetikai kifejezések lengyelformára hozása

I. Felzárkoztató Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Intermec EasyCoder PM4i nyomtató programozásának alapjai Intermec Fingerprint v8.00 nyelven

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

2. Készítsen awk szkriptet, amely kiírja az aktuális könyvtár összes alkönyvtárának nevét, amely februári keltezésű (bármely év).

Excel Hivatkozások, függvények használata

A sed folyamszerkesztő

Excel Hivatkozások, függvények használata

az Excel for Windows programban

Forráskód formázási szabályok

PPKE-ITK Bevezetés a programozásba 1.

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

Operációs rendszerek 1.

Rekurzió. Dr. Iványi Péter

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Minta felvételi feladatsor programozásból

Programozás alapjai óra. Morvai Flórián, 2010 Dr. Dévényi Károly előadásvázlata alapján

LINUX PMB LINUXOS PARANCSOK ÉS HASZNÁLATUK - GRUB

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

ALGEBRAI KIFEJEZÉSEK, EGYENLETEK

Bevezetés a programozásba I.

C/C++ programozás UNIX környezetben

Munka állományokkal. mv: áthelyezés (átnevezés) rm: törlés. rmdir: üres könyvtár törlése. -r, -R: rekurzív (könyvtár) -r, -R: rekurzív (könyvtár)

2005_01/1 Leírtunk egymás mellé hét racionális számot úgy, hogy a két szélső kivételével mindegyik eggyel nagyobb a két szomszédja szorzatánál.

Alapok: Használd számológép helyett

III. Felzárkóztató mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Komputeralgebra Rendszerek

A PiFast program használata. Nagy Lajos

Tipikus hibák a szövegszerkesztésben. Dr. Nyéki Lajos 2017

Mérnöki programozás 8. Szerkesztette: dr. Vass Péter Tamás

Komputeralgebra Rendszerek

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

A C programozási nyelv I. Bevezetés

Munka állományokkal, könyvtárakkal I.

Hálózati adminisztráció Linux (Ubuntu 8.04) 7. gyakorlat

Átírás:

6. BASH programozás I. A BASH héj, mint a legtöbb héj, nemcsak egy felhasználói felület, de kifinomult, magasszintű programozási nyelvet megvalósító értelmező program (interpreter) is. A BASH ezzel a nyelvvel alkalmas a napi feladataink automatizálására, a munkakörnyezet bővítésére, testreszabására. Miért kell megismernünk? Az összetettebb feladatokat akkor tudjuk elvégezni, ha a megfelelő vezérlő szerkezeteket ismerjük. Az automatizálás igen fontos eleme a számítógéphasználatnak. A Unix rendszerek felépítésében komoly szerepet kapnak a héjprogramok (glue). Az értelmező BASH programok szöveges állományok, amelyek futtatását rendszermag végzi bash program segítségével. Amikor elterjedten kezdtek több héjprogramot használni, szükségessé vált az értelmezőprogram meghatározása. Ha a fájl első két karaktere 01 a mag az utána következő programnevet használja futtatásra. 6.1. Változók Mint minden parancsokra épülő programozási nyelv, a BASH nyelve is rendelkezik változókkal. BASH változókat a parancssorban is használhatunk, de programokban mindenképpen szükségünk van rájuk. A változók névvel és értékkel rendelkező eszközök, általában szöveges érték tárolására használjuk a hagyomány szerint nagybetűkkel írjuk a nevüket Az értékadás 2345678927 Az értékadás baloldalán egy változó neve, jobboldalán egy kifejezés áll. Az értékadás hatására a változó értéke felveszi a kifejezés értékét. Az egyenlőségjel bal és jobb oldalán nem lehet szóköz! Példa KONYVTAR=tmp SZOVEG=" h e l l o v i l a g " Ha a szöveges értékben szóköz szerepel, a szöveget kettős idéző jelek (") közé kell zárnunk. Ha ezt nem tesszük meg, a BASH a szóközök mentén szétválasztja a szöveget és listaként kezeli. Behelyettesítés 234567892 A változóbehelyettesítés használatakor a változónév elé egy $ karaktert írunk. Az adott helyre a BASH a változó értékét helyettesíti be. 19

Példa KVT=tmp ALKVT= e l s o ALALKVT=masodik mkdir p $KVT/$ALKVT/$ALALKVT $VALTOZO A megadott nevű környezeti változó aktuális értékének behelyettesítése. létezik, üres szót kapunk. Ha a változó nem ${VALTOZO} Hatása megegyezik az előzővel, de ez akkor is használható, ha közvetlenül a kifejezés után betű, számjegy vagy aláhúzásjel áll (máskülönben azt a név részének tekintené a shell). ${VALTOZO:-ERTEK} Ha üres, a kifejezést kel helyettesíti. Különben a kifejezés értéke A értéke változatlan marad. ${VALTOZO:=ERTEK} Ha üres, a változó értékét re állítja. ${VALTOZO:?UZENET} Ha a nak nincs értéke, akkor megszakad a futás az ben megadott szöveg kiírása után Töltsük le a 55!""###9$%7&'$"(&))*"6+,-,"'*$45t és futtassuk! NEV=Gizi echo Nev : $NEV Az.6 parancs egyszerűen kiírja az összes paraméterét a szabványoskimenetre. A kiírt listában a paramétereket egy szóköz választja el. Idézőjelek hatása A kettős idézőjelek (/ [ALT+2]) részleges elszigetelést jelölnek, ami azt jelenti, hogy a héj értelmezi és behelyettesíti a benne található, számára értelmes karaktereket. Ha például egy * karaktert talál, akkor azt a munkakönyvtárban levő fájlok neveinek listájával fogja helyettesíteni. Ha karaktert lát, a közvetlenül utána következő szót változónévnek vagy parancssori paraméternek fogja tekinteni és a megfelelő értéket behelyettesíti. A szimpla (egyszeres) idézőjelek (0 [ALT+1]) használata teljes elzárást jelent. Az ilyen karakterláncokban a héj semmiféle értelmezést nem végez, azok tartalmát betű szerint kezeli. A visszafelé hajló (1 [ALT+7]) idézőjelek kifejezetten parancsvégrehajtást jelölnek. Az ilyen szöveget a héj parancssornak tekinti, végrehajtja és az eredménnyel helyettesíti. Ez a parancsbehelyettesítésnek nevezett eljárás lehetővé teszi, hogy egy változónak azonnal átadjuk egy esetleg meglehetősen bonyolult parancssor kimenetét. Töltsük le a 55!""###9$%7&'$"(&))*"6+,-,"243555t és futtassuk! 01110 változó behelyettesítés van 21112 változó behelyettesítés nincs 2011102 a 0 jelek elvesztik különleges jelentésüket 0211120 a 2 jelek elvesztik különleges jelentésüket 31113 A közrezárt szöveg végrehajtásra kerül 1. táblázat. Idézőjelek fajtái és használatuk 20

! /bin/bash #NEV= G i z i echo n " Kerek egy nevet : " read NEV echo Nev : $NEV echo "Nev : $NEV" echo Nev : $NEV echo "Nev : $NEV " echo "Nev : $NEV" Eredmény (Ha a NEV értéke Gizi) Nev : Gizi Nev : Gizi Nev : $NEV Nev : Gizi "Nev : $NEV" Érték beolvasása )*' 234567892 A read utasítás a felhasználó által írt szöveget helyezi el az utána írt változóban. A felhasználó a szöveg beírása közben használhatja a szerkesztő billentyűket és a szövegben tetszőleges karaktereket elhelyezhet. Példa read KVT mkdir "$KVT" Az idézőjelek (") miatt a parancs akkor is egy paramétert kap, ha a felhasználó által beírt szövegben szóköz van. 6.2. A környezeti változók A környezeti változók névvel és értékkel rendelkező eszközök, amelyek nevüket onnan kapták, hogy a munkakörnyezetet írják le a programok számára. Minden folyamat rendelkezik környezeti változókkal, nemcsak a BASH, nem csak a héjprogramok. (Ahogyan minden folyamat rendelkezik munkakönyvtárral is!) A környezeti változók kezelése egyirányú: A szülőfolyamat meghatározza a gyermekfolyamat környezeti változóit, de a gyermek nem változtathatja meg a szülő környezeti változóit. Amikor egy folyamat egy másik folyamatot indít, másolat készül a környezeti változóiról. A folyamat futása közben használhatja, megváltoztathatja a környezeti változóit. A folyamat futása közben újabb környezeti változókat hozhat létre. Amikor egy folyamat befejeződik, a környezeti változói megsemmisülnek. 21

A környezeti változók használata A BASH programban a környezeti változó értékét ugyanúgy helyettesíthetjük be, mint a BASH saját változót. echo $USER@$HOSTNAME Ezeket a változókat a BASH program a szülőfolyamattól örökölte. A környezeti változó megváltoztatása Ha megváltoztatjuk egy környezeti változó értékét, az utána indított programok már az új értékét kapják meg. (A BASH változók értékét azonban nem kapják meg az indított programok.) USER= g i z i netscape Ha a környezeti változó létezett, az új értéket kapják meg a gyermekfolyamatok; ha nem, akkor csak egy BASH változót hoztunk létre. Környezeti változó létrehozása Környezeti változót a BASH változóból, az 4 6)5 parancs segítségével hozhatunk létre. IZE=" mintamokus " export IZE Az 4 6)5 parancs kiadása után több változónevét is írhatjuk, mindegyikből környezeti változó lesz. Az egyszerűsített írásmód esetén az értékadást és az 4 6)5 kulcsszót egy sorban helyezzük el. export IZE=" mintamokus " Az export parancs kiadása után több értékadást írhatuk, mindegyik környezeti változót hoz létre. $BASH $HOME $USER $USERNAME $HOSTNAME $PWD $PATH $COLUMNS $LINES $TERM $EDITOR A futtató bináris állomány A felhasználó saját könyvtára Felhasználó login neve A felhasználó teljes neve A gép neve Aktuális könyvtár A parancsok keresési útja Betűoszlopok száma a képernyőn Sorok száma képernyőn Terminál típusa Alapértelmezés szerinti szövegszerkesztő 2. táblázat. Fontosabb környezeti változók 22

6.3. Parancssori paraméterek A héjprogramok meghívásakor átadhatunk egy vagy több paramétert. Több paraméter esetén azokat egy vagy több szóköznek kell elválasztania. Ha az átadandó paraméter maga is tartalmaz szóközt, kettős idézőjelbe kell tenni. A parancssori paraméterek értékére a -5+,... szimbólumokkal hivatkozhatunk. A szám a kérdéses paraméter sorszáma. A 0 sorszámú paraméter minden esetben maga a meghívott program neve. 45 A parancssori paraméterek száma 46 A legutoljára végrehajtott parancs visszatérési értéke 44 A futó program folyamatazonosítója 47 Az n-edik parancssori paraméter értéke 48 A pillanatnyi héjprogram neve 49 Valamennyi parancssori paraméter egyben, egyetlen karakterláncként (04 4 111 4 1110) 4 Valamennyi parancssori paraméter egyben, egyenként idézőjelbe téve (040 040 111 040 111) 3. táblázat. A héj névvel nem rendelkező belső változói 6.4. Matematikai kifejezések Számos esetben szükségünk lehet egyszerű matematikai műveletekre a héjprogramozás során. Az 4 ) egy négy alapműveletes számológép, de kizárólag egész számokkal képes műveleteket végezni. Logikai VAGY operátor. Visszatérési értéke az első paraméter, ha az nem nulla vagy nem üres karakterlánc, egyébként a második. Logikai ÉS operátor. Visszatérési értéke az első paraméter, ha egyik argumentuma sem nulla vagy üres karakterlánc. Ellenkező esetben nullát ad vissza. 4. táblázat. Az 4 ) logikai operátorai < Kisebb <= Kisebb vagy egyenlő > Nagyobb >= Nagyobb vagy egyenlő =, == Egyenlő!= Nem egyenlő 5. táblázat. Az 4 ) által ismert relációs jelek Összeadás Kivonás 9 Szorzás Osztás Maradékképzés 6. táblázat. Az 4 ) műveletei A relációs jelek (6. táblázat) használatakor az 4 ) 1-et ad vissza, ha az összehasonlítás igaz, nullát ha hamis. Az összehasonlítás elvégzése előtt megkísérli számokká alakítani a megadott paramétereket. Ha ez sikeres, aritmetikai összehasonlítást végez. Ha bármelyik paramétert nem kées átalakítani, akkor az összehasonlítás betűrend szerinti (lexikografikus) lsez. Ilyenkor az a paraméter számít nagyobbnak, amelyikben előbb következik magasabb ASCII kódú karakter. Aritmetikai műveletek csak számokon hajthatóak végre, így ha valamelyik paraméter nem alakítható számmá, hiba keletkezik. Buktató: ügyeljünk arra, hogy az 4 )az egyszerű műveleti jeleket is csak akkor hajlandó értelmezni, a azokat szóközök választják el a tényezőktól. Így a 6714 ) 89+1 forma például helytelen. A helyes írásmód: 6714 ) 8 9 +1 23

Arra is figyelni kell, hogy az 4 ) egyes műveletei a héj számára is értelmesek és ha elfelejtjük levédeni ezeket a : karakterrel, furcsa mellékhatásokat tapasztalhatunk. Példa az expr használatára 55!""###9$%7&'$"(&))*"6+,-,"4 );4'* Nem csak az 4 ) használható matematikai műveletek elvégzésére, hanem a 45 parancs is. Példa 55!""###9$%7&'$"(&))*"6+,-,"45 COUNTER=10 echo "$COUNTER" l e t COUNTER =1 echo "$COUNTER" l e t COUNTER=COUNTER 1 echo "$COUNTER" echo " $ ( (COUNTER =1) ) " echo " $ ( (COUNTER=COUNTER 1) ) " echo " $ [COUNTER =1] " echo " $ [COUNTER=COUNTER 1] " 6.4.1. A beágyazott utasítás... $ ( u t a s i t a s )... Beágyazott utasítást bárhová elhelyezhetünk, ahol változó értékét behelyettesíthetjük. A beágyazott utasítás is behelyettesítés. A BASH a <= kifejezésen belül található utasítást parancsként (programként) végrehajtja. A kifejezés behelyettesítési értéke a program szabványos kimenetén megjelenő lista lesz. A beágyazott utasítás egy formája a visszafele hajló idézőjel, lásd a 1. táblázatot (20. oldal). Tehát a <$5*5*= ekvivalens a 1$5*5*1-al, Gyakorlásképp 1. Írj szkriptet, mely beolvas egy szöveget, eltárolja azt, majd kiírja a konzolra. 2. Írj szkriptet, mely kiírja a paraméterként kapott fájl típusát és tartalmát. Felhasznált irodalom Pere László Programozási nyelvek jegyzete (PTE) Büki András: Héjprogramozás, Kiskapu kiadó 24