Szkriptnyelvek
1. UNIX shell
Szkriptek futtatása ●
●
Parancsértelmező shellscriptneve paraméterek shellscriptneve 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 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 F “Parameters” awk F 'BEGIN{ head} 'BEGIN { main part } END{ tail } ' [file or stream] END command [args] |awk '...' Pl.:awk 'END { print NR }' /etc/passwd awk 'NF > 0' /etc/passwd awk F ' ' MIT=$1 MIRE=$2 ' mainpart'