A bash egy unix rendszerhéj, amely a GNU Projekt részeként készült. A futtatható fájl neve bash egy játékos mozaikszó, mely a Bourne again illetve a born again kifejezéseket rövidíti. Ez a korai Bourne shell-re utal, melyet még 1978-ban adtak ki a Unix 7 Verzió részeként. A bash-t 9 évvel ezt követően 1987-ben készítette el Brian Fox, majd 1990-ben Chet Ramey vette át a szoftver gondozását. A legtöbb Linux rendszeren, valamint az OS X rendszereken a bash az alapértelmezett shell.
Mire jó? Megkönnyíti a felhasználók munkáját, automatizálni lehet vele folyamatokat, pl: karbantartást. Windowsban is van hasonló, ott batch-nek hívják, és .bat a futtatható fájl kiterjesztése.
Első programunk
A bash fájlok kiterjesztése .sh. Tehát egy ilyen fájlt fogunk létrehozni sima nano szövegszerkesztővel. nano elso.sh
Tartalma:
#!/bin/bash
echo „Hello World, ez az első bash programom!”
Lefuttatni a bash elso.sh utasítással lehet, vagy adni kell neki futtatási jogot: chmod a+x elso.sh és utána ./elso.sh
Az echo parancsot kiíratásra használjuk.
Komment elhelyezése: # ha egysoros, ” és ‘ ha többsoros
Második program
Hozzunk létre egy változót, ami két szám összegét tárolja, majd írassuk ki a tartalmát!
1 2 3 4 5 6 7 |
nano masodik.sh #!/bin/bash # Két szám összeadása ((osszeg=25+35)) #Eredmény kiíratása echo $osszeg |
Futtatás: bash masodik.sh
While ciklus
While ciklus segítségével számoljunk el 5-ig! A szamlalo nevű változó értékét növeljük mindig eggyel, amíg <=5 Ha eléri az értéke az 5-öt, akkor ki fog lépni a program a while ciklusból.
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash ervenyes=true szamlalo=1 while [ $ervenyes ] do echo $szamlalo if [ $szamlalo -eq 5 ]; then break fi ((szamlalo++)) done |
FOR ciklus
Számoljunk 1-től 5-ig!
1 2 3 4 5 6 |
#!/bin/bash for (( szamlalo=1; szamlalo<=5; szamlalo++ )) do echo -n "$szamlalo " done printf "\n" |
Számoljunk 10-től 1-ig vissza!
1 2 3 4 5 6 |
#!/bin/bash for (( szamlalo=10; szamlalo>0; szamlalo-- )) do echo -n "$szamlalo " done printf "\n" |
Adatok bekérése, read
Üdvözöljük a felhasználót, kérjük be a nevét egy változóba!
1 2 3 4 |
#!/bin/bash echo "Enter Your Name" read name echo "Welcome $name to LinuxHint" |
Kérjük be egy téglalap két oldalának hosszát, majd számoljuk ki a kerületét, területét!
1 2 3 4 5 6 7 8 9 |
#!/bin/bash echo "A téglalap a oldala:" read a echo "A téglalap b oldala:" read b ((terulet=a*b)) ((kerulet=(a+b)*2)) echo "A téglalap területe $terulet" echo "A téglalap kerülete $kerulet" |
IF és ELSE IF, feltételek kezelése
Feltételnél if-fel kezdünk és fi-vel jelezzük a végét. Operátorok:
-eq’ for equality, ‘ (egyenlő)
-ne’ for not equality and ‘ (nem egyenlő)
-gt’ for greater than (nagyobb, mint…)
-lt’ for less then (kisebb, mint…)
Lehet használni itt is ÉS, VAGY operátorokat is. ( &&, ||) Szöveges adatok esetén ha egyezőséget vizsgálunk, akkor ==, ha nem egyenlő akkor !=
1 2 3 4 5 6 7 8 9 |
#!/bin/bash echo "Adj meg egy számot 0 és 100 között!" read n if [ $n -lt 10 ]; then echo "Az adott szám egy számjegyből áll." else echo "Az adott szám több számjegyből áll." fi |
Természetesen használhatjuk a jól megszokott relációs jeleket is, de ebben az esetben (( )) közé kell írni a feltételeket!
1 2 3 4 5 6 7 8 9 10 11 |
Hány számjegyű a szám? ((n=107)) if (( $n < 10 )); then echo "egy számjegyű" elif (( $n <= 99 )); then echo "két számjegyű" else echo "több mint 2 számjegyű" fi |
Szöveges adatok vizsgálata
1 2 3 4 5 6 7 8 9 10 |
!/bin/bash echo "Enter username" read username echo "Enter password" read password if [[($username =="admin" && $password == "secret")]] then echo "valid user" else echo "invalid user" fi |
ELSE IF, azaz elif
Melyik érdemjegynek mi a neve? Kérjünk be egy számot, és írjuk ki, hogy nevezik.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/bash echo "Add meg az érdemjegyet" read n if [ $n -eq 1 ]; then echo "elégtelen" elif [ $n -eq 2 ]; then echo "elégséges" elif [ $n -eq 3 ]; then echo "közepes" elif [ $n -eq 4 ]; then echo "jó" elif [ $n -eq 5 ]; then echo "jeles" else echo "Csak 1-től 5-ig vannak az osztályzatok!" |
Hozzunk létre egy új könyvtárat, ha még nem létezik…
1 2 3 4 5 6 7 8 9 |
echo "Az új könyvtár neve" read ndir if [-d"$ndir"] then echo "Már van ilyen könyvtár" else `mkdir $ndir` echo "Könyvtár létrehozva :) " fi |
Vizsgáljuk meg, a megadott nevű fájl létezik-e?
1 2 3 4 5 6 |
filename=$1 if["$filename"] then echo "Igen, létezik" else echo "Nincs ilyen fájl az aktuális mappában!" fi |
CASE Természetesen itt is van CASE, hasonlóan működik, mint a többi programozási nyelvben. case-zel kezdődik, és easc-kal jelezzük a végét. A feladat ugyanaz, mint az előbb, adjuk meg, melyik osztályzatnak mi a neve!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash echo "Add meg az érdemjegyet" read n case $n in 1) echo echo "Elégtelen" ;; 2) echo "elégséges" ;; 3) echo "közepes" ;; 4) echo "jó" ;; 5) echo "jeles" ;; *) echo "1-5 közötti számot kérek!" ;; esac |
Függvények
Hozzunk létre egy saját függvényt! A függvényt a function utasítással adjuk meg, majd adunk neki egy nevet. Első függvényünk egy sima szöveg kiíratás lesz. A függvényt, hasonlóan a többi programozási nyelvhez, a nevével tudjuk meghívni (futtatni)
1 2 3 4 5 6 |
function Fuggvenyem() { echo 'Szeretem a bash programozást!' } Fuggvenyem |
Futtatás a szokásos módon, a fájl nevével: bash fuggveny_pelda.sh. Az eredmény pedig, hogy kiírja: I like bash programming
Függvény paraméterekkel
Számoljuk ki egy téglalap területét. Ebben az esetben a függvényünk 2db paramétert fog várni, az a és a b oldal hosszát, ezek $1 és $2-vel vannak jelölve. Ezzel azt jelezzük, hogy numerikus adatot várunk a függvényünk paramétereként.
1 2 3 4 5 6 |
teglalap_terulete() { terulet=$(($1 * $2)) echo "A téglalap területe : $terulet" } teglalap_terulete 10 20 |
A Bash függvények numerikus és szöveges értéket is átadhatnak. Nézzünk egy példát… Készítsünk egy függvényt, ami üdvözli a felhasználót. A felhasználótól egy nevet fogunk bekérni, ezt fogja a függvényünk felhasználni!
Hozzunk létre egy új bash fájlt: udvozlo_fuggveny.sh néven!
1 2 3 4 5 6 7 8 9 |
#!/bin/bash function udvozles() { str $nev echo $str } echo "Írd be a neved!" read nev val=udvozles() echo "A függvény visszatérési értéke: $val |
Futtassuk le a scriptet: