1. Alapok. #!/bin/bash



Hasonló dokumentumok
Szkriptnyelvek. 1. UNIX shell

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

BASH SCRIPT SHELL JEGYZETEK

6. BASH programozás I.

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

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. #!

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

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

chmod umask chown, chgrp

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

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

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


AWK programozás, minták, vezérlési 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

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

Rendszerprogramozás Linux környezetben

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

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

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

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

Operációs rendszerek gyak.

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.

A héj vezérlő szerkezetei I.

Példa: Aktuális könyvtár tartalmának fájlba mentése, melynek neve az aktuális dátum és idő: ls l > `date+%f_%h-%m`.txt

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

AWK programozás Bevezetés

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

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

Webprogramozás szakkör

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

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

Operációs rendszerek 1.

Operációs rendszerek gyak.

Bevezetés jogosultságkezelés, csővezeték, átirányítások. BASH script programozás

az Excel for Windows programban

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

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

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Vezérlési szerkezetek

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

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

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Javacript alapismeretek

A C# programozási nyelv alapjai

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

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

Informatika terméktervezőknek

Python bevezető foglalkozás Python bevezető foglalkozás

Operációs rendszerek MINB240/PMTRTNB230H

Operációs rendszerek. 10. gyakorlat. AWK - bevezetés UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

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)

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

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

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

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

Gyakorló feladatok Gyakorló feladatok

Bevezetés a programozásba I.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

A legfontosabb DOS parancsok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

C programozási nyelv

Készítette: Nagy Tibor István

Programozás I. házi feladat

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

A shell vezérlő szerkezetei I.

Szoftvertervezés és -fejlesztés I.

Internet programozása. 3. előadás

Operációs rendszerek 1.

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

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

Bevezetés jogosultságkezelés, csővezeték, átirányítások. BASH script programozás

Java-s Nyomtatványkitöltő Program Súgó

A számok kiíratásának formátuma

Komputeralgebra Rendszerek

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Programozás I. gyakorlat

Gyors tippek linuxra

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

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Linux parancsok összefoglaló.

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

Programzás I gyakorlat

8. Mezőutasítások. Schulcz Róbert 8. Mezőutasítások. v

Programozás Minta programterv a 1. házi feladathoz 1.

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

C programozási nyelv Pointerek, tömbök, pointer aritmetika

A perzisztens adatkezelő rendszer tesztelése és demonstrálása a GRID környezetben

Tájékoztató. Használható segédeszköz: -

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

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

Powershell 1. gyakorlat

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

Az alábbiakban néhány Linux parancsra látunk példákat, feladatokat.

7. fejezet: Mutatók és tömbök

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

Operációs rendszerek. 3. gyakorlat. Jogosultságkezelés, linkelés, csővezeték UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Számítások, hivatkozások

XCZ állományok ellenőrzése, átadása elektronikus beküldésre és közvetlen beküldése parancssori funkcióval az ÁNYK programban

A JavaScript főbb tulajdonságai

Átírás:

1. oldal 1.1. A programfájlok szerkezete 1. Alapok A bash programok tulajnképpen egyszerű szöveges fájlok, amelyeket bármely szövegszerkesztő programmal megírhatunk. Alapvetően ugyanazokat a at használhatjuk bennük, amelyeket parancssorból is kiadhatunk, csak ezekhez társul még néhány programvezérlési szerkezet. A héjprogramokat általában a sorral kezdjük. Ez jelzi a parancsértelmezőnek, hogy egy bash programról van szó, és ez alapján kezeli az állományt. A programok végére érdemes odaírni az parancsot. Bár a programfájl végén a program egyébként is visszatér a parancssorhoz, csak az exit parancs használatával tudunk pontosan egy értéket visszaadni a programból. A programban megjegyzéseket a # jel után helyezhetünk el. 1.2. A programok futtatása A programok futtatására két lehetőségünk van. Az első az, hogy az sh parancs után beírjuk a fájl nevét az alábbi formában: sh fájlnév Futtathatjuk azonban a programokat a teljes elérési útjuknak a megadásával is (ez a gyakoribb). A programnak az első használat előtt futtatási jogot kell adnunk a chmod parancs segítségével. 2.1. Változók létrehozása 2. Változók A bash nyelv gyengén típusos, ami azt jelenti, hogy a változókat nem kell deklarálnunk, hanem azok az első használatkor létrejönnek, típusuk pedig a használat módjának megfelelően alakul. Tulajnképpen minden változó egyszerű karakterlánc. Ha egy már meglévő változót szeretnénk használni, akkor arra úgy kell hivatkoznunk, hogy egy $ jelet írunk a neve elé: $név A $ jel használata minden esetben kötelező, ha a változót már korábban létrehoztuk, és nem akarunk neki új értéket adni. 2.2. Értékadás a változóknak Egy változónak értéket programon belül az egyenlőségjel használatával adhatunk: név=érték Ha a változó értékét a felhasználótól szeretnénk megkapni, akkor a read parancsra van szükségünk, amelyet az alábbi formában használhatunk: read név

2. oldal Ekkor a program megfelelő helyén a felhasználónak kell megadni a változó értékét. A parancs alapértelmezésben a bevitel lezárására az ENTER billentyű lenyomását várja. Ezen mósíthatunk a parancs kapcsolóival. A parancs néhány kapcsolója: -s megtiltja, hogy a szöveg megjelenjen a képernyőn -nszám megadja, hogy pontosan hány karaktert vár, a karakterek számát a szám helyére kell írni -p karakterlánc megadja a kiírandó szöveget, a szöveget a karakterlánc helyére kell írni (kettős idézőjelek ( ) közé zárva) Ha már értéket adtunk egy változónak, akkor a kiíratása az echo paranccsal történik. Ez a paraméterül kapott változót, vagy karakterláncot a szabványos kimenetre írja: echo $név Ha az echo parancsnak olyan karakterláncot szeretnénk adni, amely szóközt is tartalmaz, akkor kettős idézőjelek ( ) közé kell azt tennünk. 2.3. Belső változók A nyelvnek vannak belső változói is. Ezeknek a nyelv automatikusan értéket ad, így azokat már nem kell a programban külön bevezetni. A legfontosabb belső változók: $# a paranccsori paraméterek száma $? a legutoljára végrehajtott parancs visszatérési értéke $$ a futó program folyamatazonosítója $! a háttérben utoljára végrehajtott parancs folyamatazonosítója $n az n-edik parancssori paraméter értéke, ahol n értéke legfeljebb 9 lehet $* minden parancssori paraméter egyben, egyetlen karakterláncként $@ minden parancssori paraméter egyben, egyenként idézőjelbe téve 2.3. Előre deniált változók A nyelvnek vannak előre deniált változói is, amelyeket nem csak a programokban, hanem a parancssorban is használhatunk. Ezek listáját a set paranccsal kérdezhetjük le. Néhány előre deniált változó: HOME USER MAIL OSTYPE PATH PWD SHELL TERM COLUMNS LINES SSH_CLIENT a felhasználói könyvtár elérési útját tartalmazza a felhasználó login nevét tartalmazza annak a mappának a nevét tartalmazza, ahová e-mailjeink érkeznek az operációs rendszerünk típusát tartalmazza azokat az elérési útvonalakat tartalmazza, ahol a parancsértelmező futtatható állományokat keres, ha több ilyen könyvtár van, elérési útjaik közé kettőspontot kell tenni az aktuális könyvtár elérési útját tartalmazza a jelenleg futó parancsértelmező elérési útvonalát tartalmazza a terminál típusát tartalmazza a képernyő oszlopainak számát tartalmazza a képernyő sorainak számát tartalmazza az ssh kliens adatait tartalmazza Az előre deniált változók értékét meg is változtathatjuk, egyszerű értékadással.

3. oldal 3.1. Matematikai kifejezések 3.Kifejezések kiértékelése A matematikai műveletek elvégzésére az expr parancs áll rendelkezésre. Ez tudja az alapvető műveleteket, de csak egész számokat tud kezelni. A parancsnak paraméterként kell megadni az elvégzendő műveleteket, szóközökkel elválasztva egymástól a számokat és a műveleti jeleket. Ha egy expr parancs által kiszámolt értéket akarunk értékül adni egy változónak, a műveletet balra dőlő idézőjelek (`) közé kell zárni: név=`expr kifejezés` A balra dőlő idézőjel minden esetben a kifejezést kiértékeli, és a kimenő adatával helyettesíti azt. Ha a kifejezésben speciális karaktereket használunk, akkor azokat le kell védenünk a \ jellel. A parancs által ismert műveletek: + összeadás - kivonás * szorzás / osztás % maradékképzés 3.2. Logikai kifejezések A logikai műveletek elvégzésére a test parancs áll rendelkezésre. Igaz értékkel tér vissza, ha a kifejezés teljesül, hamissal, ha nem teljesül. A parancs egyszerűbb alakban úgy használható, hogy a kifejezést szögletes zárójelek közé írjuk: A parancs fájlokra vonatkozó kapcsolói: [ kifejezés ] -r értéke igaz, ha a fájl létezik, és olvasható -w értéke igaz, ha a fájl létezik, és írható -x értéke igaz, ha a fájl létezik, és futtatható -f értéke igaz, ha a fájl létezik, és közönséges fájl -d értéke igaz, ha a bejegyzés létezik, és könyvtár -h értéke igaz, ha a bejegyzés létezik, és közvetett hivatkozás -c értéke igaz, ha a bejegyzés létezik, és karaktereszköz-meghajtó -b értéke igaz, ha a bejegyzés létezik, és blokkeszköz-meghajtó -p értéke igaz, ha a bejegyzés létezik, és nevesített csővezeték -u értéke igaz, ha a fájl létezik, és setuid bitje be van állítva -g értéke igaz, ha a fájl létezik, és setgid bitje be van állítva -k értéke igaz, ha a fájl létezik, és sticky bitje be van állítva -s értéke igaz, ha a fájl létezik, és hossza nem nulla A parancs karakterláncokra vonatkozó kapcsolói: -z karakterlánc értéke igaz, ha a karakterlánc hossza nulla -n karakterlánc értéke igaz, ha a karakterlánc hossza nem nulla karakterlánc1 = karakterlánc2 értéke igaz, ha a két karakterlánc azonos karakterlánc1!= karakterlánc2 értéke igaz, ha a két karakterlánc nem azonos karakterlánc igaz értéket ad vissza

4. oldal A parancs egész számokra vonatkozó operátorai: n1 eq n2 n1 ne n2 n1 gt n2 n1 ge n2 n1 lt n2 n1 le n2 A parancs logikai operátorai:! tagadás -a logikai és -o logikai vagy 4.1. Elágazás értéke igaz, ha n1 és n2 egyenlők értéke igaz, ha n1 és n2 nem egyenlők értéke igaz, ha n1 nagyobb, mint n2 értéke igaz, ha n1 nagyobb, vagy egyenlő, mint n2 értéke igaz, ha n1 kisebb, mint n2 értéke igaz, ha n1 kisebb, vagy egyenlő, mint n2 4. Programvezérlési szerkezetek Kétféleképpen hozhatunk létre elágazást. Az első az if-es szerkezet, amely így néz ki: if [ feltétel ] 1 else 2 Értelemszerűen, ha a feltétel teljesül, akkor a 1 ág, ha nem teljesül, akkor a 2 ág fut le. Ha több ágú elágazást szeretnénk írni, akkor beszúrhatunk még elif ágakat. A másik lehetőségünk elágazás létrehozására a case-es szerkezet, amely így néz ki: case változó in érték1) 1;; érték2) 2;;... *) ;; esac Ez a szerkezet egy változó értékétől teszi függővé, hogy az elágazás melyik ága fusson le. A * ág akkor fut le, ha a változó az egyik értékkel sem egyezik meg. 4.2. Ciklus Ciklusszervezésre három lehetőségünk van. Ezek közül az első a for ciklus, amelyet az alábbi món hozhatunk létre: for változó in lista

5. oldal Ebben az esetben a változó felveszi az összes listabeli értéket, és mindegyikre végrehajtja a at. A listát megadhatjuk egyszerű felsorolással is, de megadhatjuk egy olyan programmal is, amelynek kimenete egy lista (például `ls`). A második lehetőségünk az úgynevezett while ciklus, amely így néz ki: while [ feltétel ] Ez mindaddig végrehajtja a at, ameddig a feltétel igaz. Ezzel szemben az until ciklus működése teljesen ellentétes: until [ feltétel ] Ez addig hajtja végre a at, amíg a feltétel nem igaz. 5.1. Függvények létrehozása 5. Függvények Programunkon belül létrehozhatunk függvényeket is, majd azokat a programból bárhonnan meghívhatjuk. A függvények létrehozása úgy történik, hogy megadjuk a függvény nevét, majd utána kapcsos zárójelek között a függvény által végrehajtandó at: név() { } Ha létrehoztunk egy függvényt, akkor azt a programból a következőképpen hívhatjuk meg: név paraméterek Fontos, hogy a paraméterekre ugyanazokat a belső változókat használhatjuk, amelyeket a programban, de függvényen belül ezek a függvény paramétereit jelentik. A függvényeknek lehet visszatérési értékük is, ezt a return paranccsal tudjuk megadni. 7.1. Feladat 7. Példaprogramok Döntsük el, hogy a programnak att paraméter pozitív, negatív, vagy nulla, az eredményt pedig írjuk ki a képernyőre: if [ $1 -lt 0 ] echo "A megatt parameter negativ" elif [ $1 -gt 0 ]

6. oldal echo "A megatt parameter pozitiv" else echo "A megatt parameter nulla" 7.2. Feladat Adjuk össze a természetes számokat 1-től a megatt paraméterig (az ismert képlet használata nélkül), az eredményt pedig írjuk ki a képernyőre: osszeg=0 i=1 while [ $i -le $1 ] osszeg=`expr $osszeg + $i` i=`expr $i + 1` echo $osszeg 7.3. Feladat Adjuk össze a természetes számokat 1-től a megatt paraméterig (az ismert képlettel), az eredményt pedig írjuk ki a képernyőre: osszeg=`expr \( $1 \* \( $1 + 1 \) \) / 2 ` echo $osszeg 7.4. Feladat Vizsgáljuk meg a programunk által kapott paramétereket. Írjunk ki hibaüzenetet, ha a paraméterek száma nem pontosan egy, továbbá vizsgáljuk meg, hogy a megatt paraméter numerikus-e, és ellenkező esetben írjunk ki hibaüzenetet: if [ $# -lt 1 ] echo "HIBA: Keves parameter" exit 1 elif [ $# -gt 1 ] echo "HIBA: Sok parameter" exit 1 case $1 in *[^0-9]*) echo "HIBA: A parameter nem szam" exit 1 esac echo "Minden rendben"

7. oldal 7.5. Feladat Írjuk ki a képenyőre a megatt paraméter összes osztóját: i=1 while [ $i -le $1 ] if [ `expr $1 % $i` -eq 0 ] echo $i i=`expr $i + 1` 7.6. Feladat Döntsük el a megatt paraméterről, hogy az prímszám-e, az eredményt pedig írjuk ki a képernyőre: if [ $1 -le 1 ] echo "A parameter nem primszam" elif [ $1 -eq 2 ] echo "A parameter primszam" else i=2 while [ $i -lt $1 ] if [ `expr $1 % $i` -eq 0 ] echo "A parameter nem primszam" echo "A parameter primszam"