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 ). Viszont a shell scriptingben nem kell kötőjellel megadni, hogy az argumentum miért felel.

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.