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

27
Szkriptnyelvek 1. UNIX shell

Upload: others

Post on 05-Aug-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

Szkriptnyelvek

1. UNIX shell

Page 2: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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

Page 3: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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 

Page 4: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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. 

Page 5: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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

Page 6: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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ő

Page 7: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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.

Page 8: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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

Page 9: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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)

Page 10: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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.ő

Page 11: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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

Page 12: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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) ...

Page 13: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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!

Page 14: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

Programok szervezése

 Feltételes utasítások, elágazások 

 if

 test

 &&

 ||

 “függvények”

Page 15: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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”  

Page 16: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

Teszt

  Test logikai­kifejezés

 [logikai­kifejezés]

true, vagy false értékkel tér vissza

shell szkriptekben alkalmazható  

Page 17: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

Feltételes elágazások

 If [ Kifejezés1 ]

then

  utasítások

elif [ kifejezés2 ]

then

  utasítások

else 

  utasítások

fi

Page 18: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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.

Page 19: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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.

Page 20: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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;

Page 21: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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;

Page 22: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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;

Page 23: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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.

Page 24: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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...

Page 25: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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

Page 26: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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 '...'

Page 27: 1. UNIX shellaries.ektf.hu/~serial/kiralyroland/download/szkript.pdf · 2012. 1. 25. · Parancsértelmez shellscriptneve ... Ebben az esetben a szkript tartalmazza a parancsértelmez

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'