Szkriptnyelvek 1. UNIX shell
Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben 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
Jogok A futtatás elengedhetetlen feltétele a futtatási jog. A jogokat a chmod parancs segítségével állítjuk be. > chmod jogok file neve > 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 A t 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 n edik 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 logikai kifejezés [logikai kifejezé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és1 et értékeli ki, ha igaznak találja, akkor végrehajtja az utasításait Az elif ágakat az if then á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;
until [kifejezés] do utasítások done; Ciklusok (until) A ciklus addig fut, míg a feltétele igazzá nem válik. While [ $A eq 1] do echo $A done;
Függvénynév () { } parancsok; Függvények 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.
Expr Kifejezések kiértékelése 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 szerkezete Awk szkriptek 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 F Parameters 'BEGIN{ head} { main part } END{ tail }' [file or stream] command [args] awk '...' Pl.:awk 'END { print NR }' /etc/passwd awk 'NF > 0' /etc/passwd awk F ' ' MIT=$1 MIRE=$2 ' main part'