Shell scripting (bash)

A shell script egy szöveges fájl, amely shell parancsok listáját tartalmazza, és programként hajtódik végre egy feladat vagy feladatok egy csoportjának végrehajtása érdekében. A shell script elsődleges célja a feladatok automatizálása és az időmegtakarítás. Fontos megérteni egy héjszkript alapvető felépítését, mivel egy számítástechnikai klaszterrel héjszkripteken keresztül lépünk kapcsolatba (lásd a következő fejezetet a Grid Engine-ről)

Mi az a Bash?

A Unix-szerű rendszerekben sokféle héj áll rendelkezésre. A Bourne Again Shell (Bash) ezek egyike, ez az alapértelmezett shell a GNU/Linux rendszereken. Van néhány előnye a többi shellhez képest, és nagyjából a standard shell, és az alábbiakban megmutatjuk, hogyan használhatjuk szkriptírásra.

Egy egyszerű bash shell szkript írása

Az alapvető shell szkript nem más, mint parancsok sorozata. Ezt mutatjuk be a következőkben.

Írjunk egy egyszerű szkriptet, amely a echo parancs segítségével kiadja a képernyőre a “hello world” szót. A szövegfájlt elmentjük myScript.sh

 #!/bin/bash echo Hello World

Egy héjszkript szintaxisának végrehajtása:bash your-script-name. A mi esetünkben azt írjuk:

$ bash myScript.sh Hello World

bonyolultabb példa

Írjunk egy kicsit bonyolultabb szkriptet, amiben több shell parancsot használunk. A szkript a ls parancsot használja a fájlok listázására, és a wc -l parancsot, amely megszámolja az adott fájl vagy szabványos bemenet sorainak számát. Ebben az esetben a wc -l a ls -l kimenetében lévő sorok számát számolja. Mindezt a pipe | használatával érjük el.

a script.sh tartalma:

 #!/bin/bash echo here are the list of files ls -l echo The number of files: ls -l | wc -l 

A következőképpen tudjuk végrehajtani:

$ bash script.sh

változók a bash szkriptekben

A bash szkriptekben is használhatunk változókat. Amelyek hasznosak a köztes parancsok kimenetének rögzítésére és más parancsok futtatására használhatók.a változóknak nincsenek adattípusai. Egy változó a bashben a következők bármelyikét tartalmazhatja: szám, karakter vagy karakterlánc.

Nem kell deklarálni egy változót, elég, ha a hivatkozásához értéket rendelünk, és máris létrejön.

Most létrehozunk egy egyszerű szkriptet egy változóval. Ehhez a változóhoz Hello world stringet rendelünk, és a változót echo-vel kiírjuk.

 #!/bin/bash VAR="Hello world" echo $VAR 

A változó hozzárendelésekor nem használtuk a $ jelet, de a változó használatakor a $ jelet kellett használnunk.

parancssori argumentumok a bash szkriptekben

A szkript is fogadhat parancssori argumentumokat. Itt módosítjuk a szkriptet, amely felsorolja a fájlt, hogy elfogadjon egy parancssori argumentumot. Az argumentum egy könyvtár elérési útvonala lesz.

a script2 tartalma.sh:

 #!/bin/bash VAR= echo here are the list of files ls -l $VAR echo The number of files: ls -l $VAR | wc -l 

Íme a szkript futtatása:

$ bash script2.sh /home/user/project

Az argumentumokat változókban tároljuk, az argumentum sorrendjének megfelelő számmal, az 1-től kezdve

  • Első argumentum:
  • Második argumentum: $2
  • és így tovább…

A mi esetünkben megfelel /home/user/project-nek.

Aritmetikai műveletek bash szkriptek

Az egész számokkal végzett aritmetikai műveletek a bashben a következő formátumban történnek:

#!/bin/bash x=6 y=2 $((10 - 5)) $((x-y)) echo $((x-y)) echo $((10-5))

Ezeket a parancsokat másolva beillesztheted a konzolra is, hogy lásd, hogyan működnek. A echo parancsoknak 4 és 5 értékeket kell kiadniuk.

A bash aritmetika nem támogatja a lebegőpontokat (pl. az 1.3 -1 művelet nem fog működni a bash-ben), a bc parancsot kell használnod. Lásd ezt a stackOverflow példát a bc használatára.

Looping over files

Ha egy feladatot próbál automatizálni a bash szkriptelés segítségével, akkor nagy valószínűséggel bizonyos parancsokat kell alkalmaznia egy könyvtár minden egyes fájljára. Ezt vad karakteres* és for ciklusokkal lehet elérni. A következő szkript a /path/to könyvtárban található összes ‘.txt’ fájlt a FILES változóban tárolja. Ezután minden egyes fájlhoz kiszámítja a sorok számát, és ezt adja ki a wc -l paranccsal.

#!/bin/bash FILES=/path/to/*.txt for f in $FILES do echo "Processing $f file..." # count number of lines and output that for file $f wc -l $f done 

Tovább a bash szkriptekről

A vezérlési struktúrák (if/else, for/while ciklusok) használatával még bonyolultabb shell szkripteket is írhatunk, és sok mindent elérhetünk csak a shell szkriptek használatával, de ez meghaladja a dokumentum kereteit. Tekintse meg az alábbi linkeket, ha jobbá akar válni a shell-szkriptek írásában.

  • http://www.freeos.com/guides/lsst/
  • http://www.tldp.org/LDP/Bash-Beginners-Guide/html/

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.