Főoldal

"Mérnököt a mérnöktől"

A Schönherz Bázis összeköti az állást kereső és állást kínáló mérnököket.

CV küldés

Küldj önéletrajzot! Gyorsan, egyszerűen.
Megjegyzésbe írd be a pozíció nevét.
CV küldés

Iratkozz fel hírlevelünkre!

Hírek

Tömb ciklusok Bash-ban
Tömb ciklusok Bash-ban

Tömb ciklusok Bash-ban


A következő cikkben bemutatjuk a Bash különböző módszereit a tömbök ciklikus bejárására. A tömbök bejárása annyira elterjedt, hogy gyakorlatilag semmilyen programozási feladatot nem oldhatunk meg nélküle. Ennek megkönnyítése érdekében fontos megérteni a különböző tömb- és ciklustípusokat, ez lesz a cikkünk célja is.

Mielőtt a lényegre térnénk, nézzük át a Bash shell programozás alapjait.


A Bash shell-ről röviden


A shell egy UNIX-os kifejezés az operációs rendszer és a felhasználó közti interfészre. A shell a felhasználó parancsait értelmező és végrehajtó réteg. Vannak rendszerek, ahol a shell neve parancsértelmező. Alapvetően bármi, amit grafikus interfésszel végre lehet hajtani, shell segítségével is megoldható. A legtöbb Unix-szerű operációs rendszer integrált része egy shell, általában Bash, Bourne shell, C shell (csh), esetleg KornShell. Az biztos, hogy legalább egy Bash megtalálható a frissen telepített Linux disztribúciónkon vagy OSX-ünkön.

A Bash a Bourne shell továbbfejlesztett verziója, ami az első széles körben alkalmazott Unix/Linux shell volt. Mai társaihoz képest korlátozott lehetőségei miatt a legtöbb programozási feladatot külső eszközökkel kellett megoldani.

A Bash egy POSIX-kompatibilis shell, a Bourne-again shell rövidítése. A Bourne shell leváltására született, ennek megfelelően sok újdonságot mutat őseihez képest.

Ahhoz, hogy megtudjuk a gépünkre telepített Bash verzióját, adjuk ki a következő parancsot:

echo $BASH_VERSION


Shell scriptek Bash használatával


A shell script egy fájl, ami olyan parancsokat tartalmaz, amiket a parancssorba is írhatnánk. Egy scriptben ezek adott sorrendben, automatikusan hajtódnak végre, mint egy C vagy Python programban. Nézzünk néhány alapvető parancsot:


cat: Megjeleníti egy file tartalmát vagy két file tartalmát ősszefűzi.

ls: Egy mappa tartalmát listázza

pwd: Az aktuális mappa elérési útvonalát írja ki

chmod: Egy file engedélyeit változtatja meg

chown: Egy file tulajdonosát változtatja meg

mkdir: Mappát hoz létre

mv: File-okat vagy mappákat mozgathatunk vele

rm: File-okat, mappákat törölhetünk vele

cd: Az aktuális mappát változtatja

exit: Kilép a terminálból


Sok más, most nem említett alapvető parancs is létezik. Ezekről az interneten bőven található dokumentáció és információ, de az előbb felsorolt parancsokkal már neki tudunk állni a shell használatának.

Feltűnhet, hogy a cikkben minden script első sora a #! karakterekkel indul. Ennek a neve shebang vagy hashbang. Ez egy speciális komment, ez köti ki a shellnek, hogy melyik programmal hajtsa végre a file-t. Shell scriptek esetén ez a sor a #!/bin/bash.

Most, hogy már láttunk pár Bash parancsot, ideje megismerkedni a tömbökkel és a ciklusokkal, végül pedig életszerű példákkal illusztráljuk, hogyan lehet tömböket bejárni a Bash scriptekben.


Ciklusok és a Bash

A ciklusok arra jók, hogy egy parancsot vagy parancs-csomagot ismétlődően végrehajtsunk, amíg egy, általában a programozó által definiált feltételt el nem érünk. A Bash háromféle ciklust ismer:

•while

•for

•until


While ciklus

Aki már valaha programozott, annak biztos ismerős, hogy ciklusokkal és if, elif, else szerkezetekkel hogyan befolyásolható a program futása.

A while szintaxisa a következő:


while <list>  

do  

    <commands>

done  



A ciklusfeltétel függhet előzőleg deklarált változóktól. Tegyük fel, hogy van egy count.sh nevű programunk. A számláló kiírja az egész számokat 0 és 10 közt.


#!/bin/bash


count=0  

while [ $count -le 10 ]  

do  

    echo "$count"

    count=$(( $count + 1 ))

done


Itt a feltétel $count -le 10, ami akkor tér vissza igaz értékkel, ha a $count változó kisebb vagy egyenlő, mint 10 (-le). Minden alkalommal, amikor ez igaznak értékelődik ki, a do és a done közti parancsok lefutnak.


Until ciklus

A while mellett az until ciklust is használhatjuk, ami nagyon hasonlít a while-ra. A két ciklus szintaxisa megegyezik, bár a ciklusfeltétel pont a while ellentéte. Ebben az esetben a ciklusmag akkor hajtódik végre, ha a feltétel hamis.


#!/bin/bash


count=0  

until [ $count -gt 10 ]  

do  

    echo "$count"

    count=$(( $count + 1 ))

done


Itt a ciklus addig fut, amíg a $count nem nagyobb (-gt), mint 10.


For ciklus

A for ciklus szintaxisa különbözik az előzőkétől. Ezek a ciklusok megoldják a ciklusváltozó inkrementálását, míg az előző esetekben ez a mi feladatunk volt.

A for ciklus szintaxisa a következő:


#!/bin/bash


for (( n=1; n<=10; n++ ))  

do  

    echo "$n"

done


A ciklusfeltételben megadjuk, hogy melyik számtól (n=1) kezdődjön, meddig (n<=10) tartson, és hányasával (n++) történjen a számlálás.

A for ciklust a következőképpen is használhatjuk:


#!/bin/bash


for user in Kate Jake Patt  

do  

    echo "$user"

done


Itt a ciklust minden string példányra hajtjuk végre, ami jelen esetben “Kate”, “Jake” és “Patt”.


Tömbök és a Bash


A Bash két típusú tömböt ismer, az asszociatív és az integer-indexelt tömböket. A tömb elemeire gyakran az indexükkel hivatkozunk, ami a tömbben elfoglalt helyüket jelenti. Az indexelés 0-tól kezdődik és egész számokból áll. Az asszociatív tömb a Bash 4.0 újdonsága.

Integer-indexelt tömböt a következőképpen deklarálhatunk és használhatunk:


#!/bin/bash


array=( A B C D E F G )  

echo "${array[0]}"  

echo "${array[1]}"  

echo "${array[2]}"  

echo "${array[3]}"  

echo "${array[4]}"  

echo "${array[5]}"  

echo "${array[6]}"


A cikkben csak az integer-indexelt tömbökkel foglalkozunk, az asszociatív tömböket pedig csak említés szintjén vesszük.


Tömbök bejárása


Most, hogy már ismerjük a Bash alapvető parancsait, ciklusait és tömbjeit, hozzunk össze egy scriptet, ami hasznosítja is ezt a tudást.

A következő egyszerű példában feltesszük, hogy a weboldalunk felhasználóit szeretnék kiíratni. A felhasználók listáját a users változó tartalmazza, ezért azt kell bejárni.


#!/bin/bash


users=(John Harry Jake Scott Philis)  

for u in "${users[@]}"  

do  

    echo "$u is a registered user"

done


Az előbbi szintaxissal bejárjuk a users tömböt, az aktuális nevet pedig ideiglenesen az u változóba tesszük. A [@] formula miatt tudja a parancsértelmező, hogy a változónk egy integer-indexelt tömb.


Elég sokféleképpen használhatjuk a ciklusokat. Ne hagyjuk, hogy a példák beszűkítsék a látóterünket, hanem ezekből kiindulva fejlesszük és használjuk a tanultakat.


(Forrás)


***

Ha Te is kreatív, kihívásokkal teli mérnök állást keresel minõségi munkáltatónál, jó helyen jársz, mert a Schönherz Bázis épp azért jött létre, hogy Neked segítsen.
Gyere, nézz szét aktuális állásaink között!