
Shell Script alapok
A Shell script egy olyan programozási nyelv, ami arra lett tervezve, hogy Unix alapú rendszerek futtassák. A használata egyszerű és gyorsan megírható. Emellett ez egy scripting language, ez azt takarja, hogy nincs szükségünk külön fordítóra. A megalkotásánál az volt a cél, hogy más, Unix programokkal kompatibilis legyen. Ez később szemléltetve is lesz.
Felépítése
Minden shell script kódra jellemző, hogy ugyan úgy kezdődnek. Az első sor mindig az kódot futtató program megadása, így a rendszer tudni fogja, hogy melyik programmal kell futtatnia. Ez a következő módon néz ki:
#!/bin/bash
Ez után kezdődik maga a kód megírása. Itt a megszokott programozási nyelvektől eltérően soha nem történik modul importálása (lásd, python: import time
), mivel itt modulok helyett Unix alapú rendszerek által futtatható programokat használ a kód. A shell scritpt kódok .sh
végződésűek. Fontos viszont, hogy a kód futtatása előtt jogot kell neki adni erre:
chmod +x elso_program.sh
Változók deklarálása
Itt a változók deklarálása egyszerűen történik. Először a már említett módon az első sorba a program megadása kerül, amivel futtatni fogja a rendszer.
Egy hello world programban először deklarálni kell a változót: VALTOZO_NEVE=valtozo_erteke
, fontos, hogy a változó neve ne használjon ékezetes karaktereket illetve helykihagyást. Következő a változó kiíratása. Ezt echo
parancsal történik: echo $változó neve
. Az echo az utána következő argumentumok kiírásáért felel. Ha a változónak nem értéket adunk, hanem az értékét kérjük le, akkor mindig rakunk egy $
-et a változó neve elé ügyelve arra, hogy ne legyen közte szóköz.
#!/bin/bash
VAR="Hello World"
echo $VAR
Mivel ez egy scripting language így a változók deklarálása nincs túlbonyolítva, nem szükséges a típus megadása. Erre jó példa a következő kódrészlet:
string="Hello World"
number=1
float=3.142
mixed=abc123
Nem előre deklarált változók
Read
A read
parancs lehetővé teszi, hogy változóknak bemeneti értéket adjunk meg értékként. Erre egy jó példa:
echo "Mi a neved?"
read nev
echo "Helló $nev"
Itt a program kiírja, hogy Mi a neved?
, majd beolvassa a nev
változó értékét, ez után az echo
parancs segítségével pedig kiírja.
Argumentumok
Argumentumokkal már találkozhattunk. Ezek a parancs után találhatóak általában egy kötőjellel kezdődnek(pl: irssi -n
Az argumentumok számozva vannak és a számozás 0-tól indul. A 0. argumnetum mindig a fájlnév és utánna következnek a váltzók.
script.sh arg1 arg2 arg3
Ezekre az argumentumokra $-el lehet hivatkozni. $, majd pedig az argumentum száma.
#!/bin/bash
echo "Fájlnév $0"
echo "1. argumentum $1"
echo "2. argumentum $2"
Ezt a programot miután elmentjük a következő képpen kell használni:
./args.sh elso masodik
Ez vissza fogja adni nekünk az fájlnév után következő első illetve második argumentumot.
Array vagyis tömb használata
Egy változó egyszerre egy értéket tárolhat. Ezzel szemben egy array többet is tud, ez azt jelenti, hogy egy új változó létrehozása helyett a már meglévő tömbhöz kell hozzáadnunk még egy elemet. Az elemekre index számmal tudunk hivatkozni, a legelső index szám a 0. Az array használatára jó példa egy névsor létrehozása.
NAME01="Attila"
NAME02="Béla"
NAME03="Károly"
A változók egyenkénti dekralásáa helyett ezeket egy tömbbe rendeljük. Így elég a tömbelem index számát tudnunk és nem kell egy új változóra hivatkoznunk.
NAME[0]="Attila"
NAME[1]="Béla"
NAME[2]="Károly"
Így érjük el azt, hogy sok változó helyett egy tömbben gyűjtjük össze a neveket és ha komplexabb programot írunk, akkor sokkal egyszerűbb dolgunk lesz. Az arrayre való hivatkozásra egy egyszerű példa:
#!/bin/sh
NAME[0]="Attila"
NAME[1]="Béla"
NAME[2]="Károly"
echo "Első Index: ${NAME[0]}"
echo "Második Index: ${NAME[1]}"
echo "harmadik Index: ${NAME[2]}"
Itt a NAME
tömbnek megadjuk az első három értékét, majd kiíratjuk. A tömbre való hivatkozáskor ${ }
közé rakjuk az array nevét, majd []
közé az indexét az elemnek, amire hivatkozni akarunk.
If használata
At if statement egy feltételből és egy állításból áll. Erre egy egyszerű példa:
if 5 -gt 4
then
echo “5 nagyobb mint 4”
fi
Itt felmerülhet a kérdés, hogy mit jelent a -gt
, ez a nagyobb mintnek felel meg, shell scriptben az operátorok mid hasonló képpen kell megadni. Ezek magyarázata:
-eq: equal to = egyenlő vele, ==
-ne: not equal to = nem egyenlő vele, !=
-lt: less than = kisebb mint, <
-le: less than or equal to = kisebb mint vagy egyenlő, <=
-gt: greater than = nagyobb mint, >
-ge: greater than or equal to = nagyobb mint vagy egyenlő, >=
Ez számokra vonatkozik, viszont fájlokkal is vannak operátorok. Ezek közül a fontosabbak:
-e a fájl létezik és
-d a fájl létezik és egy mappa
-f a fájl létezik és egy fájl
-r a fájl létezik és olvasható
-w a fájl létezik és írható
-x a fájl létezik és futtatható
-s a fájl létezik és a mérete nagyobb mint 0
Ezeket hasonló módon kell használni mint az előző példában.
if [ -e ".bash_profile" ]
then
echo " The file exists "
else
echo " File not found "
fi
While loop
A while loop addig futtatja a tartalmát újra és újra, amég az állítása igaz. Ezt legtöbbször egy boolean változóval teszik, viszont egy változó értékének ellenörzését is szokták while loop állításba tenni, viszont erre legtöbb esetben a for loop sokkal előnyösebb. A while loopra egy példa:
n=1
while [ $n -le 3 ]
do
echo "$n alkalommal lefutott"
n=$(( n+1 ))
done
For loop
A for loop hasonlít a while loopra, viszont ez arra lett kitalálva, hogy értéket növeljen és úgy hajtson végre utasításokat. A for loopra egy jó példa:
for num in {1..10}
do
echo "$num"
done
Ez a ciklus minden alkalommal lefut, amíg a num változó nem éri el a 10 értéket. A num változó alapértéke 1 és minden lefutás során az értéke növekszik 1-el. Ez megoldható, hogy ne 1-et lépjen ciklusonként, hanem példáúl 10-et.
for num in {0..100..10}
do
echo "$num"
done
Ez hasonló képpen fog lefutni mint az előző példa, viszont ezesetben 1-től 100-ig 10-esével növeli a num változó értékét. A for loopot lehet többféle képpen is hasznánli, viszont van egy mód, amit más nyelvekben is előszeretettel használnak az átláthatósága miatt.
for (( i=1; i -et 10; i++))
do
echo "$i"
done
Összefoglaló
A shell script nagyon hasznos tud lenni, ha unix alapú rendszereken akarunk műveleteket végezni, nem szeretnénk törődni modulok importálásával, valamint összetett szintaktikák alkalmázásával. Bármely linux felhasználónak jó szolgálatot tesz egy minimális shell script tudás, mivel ezzel folgyorsíthatjuk, kényelmesebbé tehetjük a munkánkat, hosszú távon nagyon kifizetődő. A terjedelmes, gyakran használt parancsokat automatizálhatjuk, ehhez nem kell mást tennünk, mint parancsainkat egy úgynevezett shell script fájlba írni és ezt a fájlt futtathatóvá tenni.