1. unix shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. ·...

Post on 05-Aug-2021

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Szkriptnyelvek

1. UNIX shell

Szkriptek futtatása

● Parancsértelmez  shell­script­neve őparaméterek

● shell­script­neve 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 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;

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 ' main­part'    awk ­F ' ' MIT=$1 MIRE=$2 ' main­part'

top related