1. unix shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. ·...
TRANSCRIPT
Szkriptnyelvek
1. UNIX shell
Szkriptek futtatása
● Parancsértelmez shellscriptneve őparaméterek
● shellscriptneve paraméterekEbben az esetben a szkript tartalmazza a parancsértelmez t:ő
#!/bin/bash
Szkriptek futtatása
> sh osszeg.sh 2 3
> 2 + 3 = 5
> ./osszeg 2 3
> 2 + 3 = 5
A program kódjában az els sor a #! őkarakterekkel kezd dik, ezután áll a őparancsértelmez elérési úttal. p.: ő/bin/sh
JogokA futtatás elengedhetetlen feltétele a futtatási jog. A jogokat a chmod parancs segítségével állítjuk be.
> chmod jogok fileneve
> chmod 700 osszeg.sh
A 700 jog azt jelenti, hogy a tulajdonos minden jogosultsággal rendelkezik (rwx) a csoprtnak és a világnak egyáltalán nincs joga a fájlhoz.
Jogok R = 4
W = 2
X = 1
A fentiek alapján a 754 jog pl. azt jelenti, hogy a tulajdonos irási, olvasási és futtatási, a csoport olvasási és futtatási, a világ csak olvasási jogokkal rendelkezik.
A jogok érvényesítése: chmod 754
A Shell szkript “belülr l”ő
UNIX parancsok mindegyike (ls,echo,...)
bels shell parancsok (...)ő
beépített változók ($#,$1,...)
definiált változók (A=2,B=5)
Operátorok (==,eq,gt,...)
Függvények (...)
Küls programokő
Változók
SZOVEG = “szöveg szöveg”
ERTEK = 10
A = ERTEK + SZOVEG
VAR1 = “az eredmény = $A”
Echo $VAR1
FIGYELEM: “echo A” hibás, ebben az esetben a rendszer az At nem változónak kezeli, mivel nem írtunk elé $jelet.
A helyes eljárás, ha értékadásnál nem, minden más esetben használjuk a $jelet.
Parancssori paraméterek
A parancssori paramétereket szóközzel elválasztva adjuk meg.
Ha a paraméter maga is tartalmaz szóközt, akkor azt idéz jelek közé őtesszük.
A paraméterekre hivatkozhatunk $i szimbólummal, ahol az i a paraméter sorszáma. A $0 paraméter a program neve. pl.: teszt.sh esetén a $0 = teszt.sh
Parancssori paraméterek
$# Az argumentumok száma (parancssori paraméterek)
$ A szkriptet végrehajtó shellnek átadott opciók
$? A legutolsó parancs visszatérési értéke
$$ A futó szkript processzeinek száma
$! A háttérben utoljára végrehajtott parancs processzeinek száma
$n az nedik argumentum értéke (max. 9 lehetséges, ezután shift)
Parancssori paraméterek
$0 Az aktuális shell, vagy program neve
$* Az összes argumentum egyben ($1,$2,..,$n; n max. 9 lehet)
$@ Az összes parancssori argumentum egyben, de az el z t l annyiban ő ő őkülönbözik, hogy itt az argumentumok egyesével, idéz jelben vannak.ő
Shell bels változóiő
HOME a felhasználó home könyvtára
LANG nyelvi beállítás, pl.: hu
MAIL a beérkez levelek helye, pl.: ő/var/spool/mail
IFS azon karakterek listája, melyet a shell szeparátorként értelmez
SHACCT ha van értéke, ebbe a fájlba ír egy üzenetet a shell minden program végrehajtásakor
Operátorok
Op1 eq Op2: ==
Op1 ne Op2: !=
Op1 gt Op2: >
Op1 ge Op2: >=
Op1 lt Op2: <
Op1 le Op2: <=
pl.: if ( $V1 ne $V2) ...
Idéz jelek használataő
'...' Teljes elzárás, nincs változó kiértékelés
“...” A shell behelyettesíti a számára értelmezhet változókat, paramétereket, őde egyben tartja a “szöveget”pl.: A = 2; B = 3; echo “$A + $B és 2” esetén az eredmény: 2 + 3 és 2, míg echo '$A + $B és 2' esetén az eredmény: $A + $B és 2
Kifejezéseket egyik esetben sem értékel ki!
Programok szervezése
Feltételes utasítások, elágazások
if
test
&&
||
“függvények”
Feltételes elágazások
Kifejezés && ut1 || ut2
A kifejezés egy, vagy több m velet. Ha a űvégrehajtás sikeres, akkor ut1 fut, ha nem akkor ut2.
Pl.: ls /bin && echo “ok” || echo “no”
Teszt
Test logikaikifejezés
[logikaikifejezés]
true, vagy false értékkel tér vissza
shell szkriptekben alkalmazható
Feltételes elágazások
If [ Kifejezés1 ]
then
utasítások
elif [ kifejezés2 ]
then
utasítások
else
utasítások
fi
Feltételek kiértékelése
A shell a kifejezés1et értékeli ki, ha igaznak találja, akkor végrehajtja az utasításait
Az elif ágakat az ifthen ág után értékeli ki, majd az els “találat” őutasításait hajtja végre.
Ha nem teljesül egyik kifejezés sem, akkor az else ág hajtódik végre.
Elif ágból lehet több is.
Case elágazás
case string0 in
string1) utasítások;;
string2) utasítások;;
*) utasítások;;
esac
A string0 lehet szabályos kifejezés is. Ha nincs találat, akkor a * ág fut, ha nincs ilyen, akor átugorjuk a teljes case kifejezést.
Ciklusok (for)
for ciklusváltozó in lista
do
utasítások
done;
A ciklusváltozó felveszi a lista értékeit.
for I in *.dat
do
echo $I
done;
Ciklusok (while)
While [kifejezés]
do
utasítások
done;
A ciklus addig fut, míg a feltétele igaz.
While [ $A gt 1]
do
echo $A
done;
Ciklusok (until)
until [kifejezés]
do
utasítások
done;
A ciklus addig fut, míg a feltétele igazzá nem válik.
While [ $A eq 1]
do
echo $A
done;
Függvények
Függvénynév ()
{
parancsok;
}
Paraméterek nem használhatóak, viszont a globális változóka használhatóak. A parancssori argumentumokhoz ($#,..,$1,$2,...,$9) nem férnek hozzá. Ezeket változókba kötve érheti el a subrutin.
Kifejezések kiértékelése
Expr
echo `expr $A + 2`
echo `expr $A / 2`
echo `expr $A \* 2`
echo `expr $A 2`
eval
parancs végrehajtása
A = eval változó
A = `parancs` is m ködikű
vizsgálható a parancs kimenete...
Beágyazott file
Cat << `marker' kiírandó szöveg marker
Fájlba ágyazható más fájlok tartalma, ami automatikusan ki is “ csomagolódik”
touch file
cat file << `m' “szöveg a fájlban” m
cat file << `b' “szöveg a fájlban” b
Awk szkriptek
AWK szerkezete
Az AWK olyan szkript (sz r ként ű őviselkedhet, vagyis illeszthet parancsok őkimenetése), melybe komplex programokat írhatunk a megfelel szintaxis őbetartásával.
Az AWK szkriptek futtatása hasonló a shell scriptekéhez.
Az AWK beágyazható a shell szkriptekbe:
cat /etc/passwd |awk '...'
Awk szkriptek
awk Fawk F “Parameters” 'BEGIN'BEGIN{ head} { main part } ENDEND{ tail }'' [file or stream]
command [args] |awk '...'
Pl.:awk 'END { print NR }' /etc/passwdawk 'END { print NR }' /etc/passwd awk 'NF > 0' /etc/passwd awk 'NF > 0' /etc/passwd awk F ' ' MIT=$1 MIRE=$2 ' mainpart' awk F ' ' MIT=$1 MIRE=$2 ' mainpart'