25
Linux/UNIX tanfolyam UNIX shell scriptek (½ rész) Tar József (Szüri) [email protected] 2005. november 7.

Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

  • Upload
    oro

  • View
    69

  • Download
    3

Embed Size (px)

DESCRIPTION

Linux/UNIX tanfolyam UNIX shell scriptek (½ rész). Tar József (Szüri) [email protected] 2005. november 7. Héjak(shellek). A UNIX rendszerek legalapvetőbb munkakörnyezete Közönséges felhasználói program Sokféle héj létezik sh csh ksh tcsh ash vsh zsh bash. Héjak(shellek). - PowerPoint PPT Presentation

Citation preview

Page 1: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Linux/UNIX tanfolyamUNIX shell scriptek (½ rész)

Tar József (Szüri)[email protected]

2005. november 7.

Page 2: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Héjak(shellek)

• A UNIX rendszerek legalapvetőbb munkakörnyezete• Közönséges felhasználói program• Sokféle héj létezik

– sh– csh– ksh– tcsh– ash– vsh– zsh– bash

Page 3: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Héjak(shellek)

• Legfontosabb tulajdonságok:– Parancsértelmező, mely a parancsokat a standard

bemenetről(stdin) vagy fájlból olvassa– Egyszerűen kialakíthatók az ún. shell

sriptek(parancsállományok)– A shell scripteket ugyanúgy paraméterezhetem akárcsak a

programokat– Ez egy programnyelv, mely string változókra és hatékony

vezérlési szerkezetekre épül.– Lehetővé teszi a B/K átirányítását, csővezetékezést, processzek

kezelését– Könnyű konfigurálhatóság, stb.

Page 4: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Parancssor,argumentumok,B/K

• Egy parancssor legegyszerűbb formája:

parancs arg1 arg2 … argn

pl. grep pista /etc/passwd• A paraméter lehet:

– egyszerű karakterlánc– állománynév– karakterlánc joker(helyettesítő) karakterekkel– Egy újabb parancs, ez a parancshelyettesítés

• Be/Kivitel átirányítása– stdin (0)– stdout (1)– stderr (2)

Page 5: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

B/K átirányítás

• stdin– pl.: cat < file1– vagy cat 0< file1

• stdout– pl.: ls > file2– vagy cat 1> file3

• hozzáfűzés stdout-al (>>)– Pl.: cat >> file4

• stderr– find / -name "*" -print

– find / -name "*" -print 2> /dev/null

Page 6: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Csővezeték(pipe)• Speciális állomány ami egy FIFO-t valósít meg.• A csővezeték mérete véges• A stdin és stdout is csővezetékbe irányítható.• pl. sort file1 | wc –w >file2• Vagy pl. ls | pr• A FIFO-nak nem kell nagynak lennie(csak 8Kb) hiszen

az egyes parancsok párhuzamosan futnak.• Az eredmény a cső végén még azelőtt megjelenhet,

mielőtt az első program az összes bemenetét feldolgozná.

Page 7: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Parancshelyettesítés

• Egy programnak paraméterként egy másik program eredményét adjuk át.

• Pl.: more `grep –l halacska *`• A különbség a csővezeték és a parancshelyettesítés

között az, hogy míg a csővezetéknél az adatok a stdin-ről jönnek azok párhuzamosan is végrehajtódhatnak, addig itt az aposztrófok közé szorított parancsnak ki kell teljesen értékelődnie mielőtt eredménye átadódhatna.

Page 8: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Parancssorozatok,Joker karakterek

• Pontosvesszővel elválasztás: pl.: date ; ls• Egy parancs végrehajtása után hátrahagy egy kilépési

értéket(exit status).• || és && használata, feltételesen végrehajtódó sorozat

– parancs1 || parancs2– parancs1 && parancs2

• Joker karakterek:* nulla vagy tetszőleges számú tetszőleges karakter

? Pontosan egy tetszőleges karakter

[abd] Az „a” avgy „b” vagy „c” karakterek egyike

[a-z] Az a-z intervallumból egy karakter

Page 9: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Szinkronizáció, background

• Eddig a kiadott parancsaink egymás után szinkronban futottak le.

• Lehetőség van azokat egyszerre, egymással aszinkron állapotban is futtatni.

• pl.: date &• Vagy pl. cc source > program &• Parancskiadásakor egy a parancshoz rendelt folyamat

jön létre azonosítóval együtt. – megszakítás(CTRL-Z), újraindítás(fg)– jobs parancs kiadásával megtekinthetjük a felfüggesztett

folyamatokat

Page 10: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Shell script(parancsállomány)

• Egy shell script egy szöveges fájl, mely parancsokat és vezérlési szerkezeteket tartalmaz. Legyen egy ilyen shell scriptünk most a my_script nevű. Tartalma:

#!/bin/bash

echo Hello World

• A shell maga is egy program ahogy azt már említettük, vagyis rekurzíve újra lefuttatható.

• Egy shell scriptet így egy shellből a következőképpen futtathatok:

sh my_scipt

Page 11: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Bourne Shell(változók)

• Irjuk be a parancssorba: ora=24

• Ezután egy parancsfájlba azt hogy echo Egy nap $ora órából áll

• A rendszer válasza:Egy nap órából áll

• Ez gáz. Ilyenkor exportálnunk kell. (export ora)

Page 12: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Bourne Shell(változók)• Speciális változók:

– $0 parancsállomány neve– $# indítási paraméterek száma– $* összes indítási paraméter– $1, $2,…,$n az első második n-edik paraméter– $$ processz szám– $HOME home katalógus neve– $PATH keresési út– Stb.

Page 13: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Legfontosabb belső parancsok• break

Kilép a while, until, for vagy select hurokból

• continue A while, until, for vagy select következõ ciklusát kezdi el

• eval [Argumentum ...] Beolvassa az Argumentumokat shell inputként, és az eredményként létrejövõ parancso(ka)t végrehajtja

• exit

A shell befejezi futását és az n értékkel tér vissza

• let Kifejezés ...Kiértékeli a megadott atritmetikai kifejezést

• read [Var]Beolvas egy sort a standard bemenetrõl a Var változóba

• shift [n]Átszámozza a pozíciós paramétereket n+1-tõl kezdve 1, 2 ...-re.

Page 14: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Legfontosabb belső parancsok• A feltételeket a test, az [ és ] illetve a [[ és ]] parancspárral adhatjuk

ki, állományok jellemzõinek vizsgálatára, számok, stringek összehasonlítására

• [-a File] Igaz, ha a File létezik • [-n String] Igaz, ha a String nem nulla hosszúságú • [File1 -nt File2] Igaz, ha File1 létezik és újabb, mint File2. • [String = Minta] Igaz, ha a String egyezik a Mintával • [String1 > String2] Igaz, ha String1 a String2 után következik

könyvtári sorrendben • [Kifejezés1 -eq Kifejezés2] Igaz, ha a Kifejezés1 egyenlõ Kifejezés2-

vel. • [Kifejezés1 -lt Kifejezés2] Igaz, ha a Kifejezés1 kisebb, mint

Kifejezés2 • [Kifejezés1 -ge Kifejezés2] Igaz, ha Kifejezés1 nagyobb vagy

egyenlõ, mint Kifejezés2

Page 15: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Vezérlési szerkezetek

If feltétel:

If parancsok

then parancsok

else parancsok

fi

For ciklus:

for i in s1 s2 …

do parancsok

done

If test $1=‘alma’

then echo ‘$1=alma’

fi

for i in alma körte

do echo $i

done

Page 16: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Vezérlési szerkezetek

While ciklus:

while parancsok

do parancsok

done

Until ciklus:

until parancsok

do parancsok

done

C=0

while [ $C -lt 10 ];

do echo The counter is $C

C=`expr $C + 1`

done

C=20

until [ $C -lt 10 ];

do echo C $C

C=`expr $C - 1`

done

Page 17: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Vezérlési szerkezetek

Case szerkezet:

Case word in

minta1) parancsok ;;

minta2) parancsok ;;

esac

case $# in

1) echo 1 ;;

2) echo 2 ;;

*) echo sok

esac

Page 18: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Egyszerű scriptek

#!/bin/bash echo Kérlek add meg a neved read NAME echo "Hi $NAME!"

#!/bin/bash tar -cZf /var/my-backup.tgz /home/me/

#!/bin/bashif test $# -le 5

  then echo Az argumentumok szama kisebb vagy egyenlo mint 5.  else echo Az argumentumok szama nagyobb mint 5.

fi

Page 19: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Számok összege 1-től a megadottig.

• #!/bin/bash • sum=0 • i=1 • while [ $i -le $1 ]; • do sum=`expr $sum + $i` • i=`expr $i + 1` • done • echo $sum

Page 20: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Milyen nap van ma?

#!/bin/bash

Mon=hetfo

Tue=kedd

Wed=szerda

Thu=csutortok

Fri=pentek

Sat=szombat

Sun=vasarnap

nap=`date +%a` # date +%a csak annyit ír ki, hogy Mon vagy Tue stb.

eval echo Ma \$$nap van.

Page 21: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

n! kiszámítása ciklussal

#!/bin/bash

i=$1

# kezdő érték beállításafac=1while [ $i -gt 0 ]dofac=`expr $fac \* $i` # kell a per jel a szorzásjel előtt, különben

# syntax errort kapunki=`expr $i - 1`done# eredmény visszaírása

echo $fac

Page 22: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Két sztring összehasonlítása

#!/bin/bash

S1='string'

S2='String'

if [ $S1!=$S2 ]; then

echo "S1('$S1') nem egyenlő S2('$S2')-vel"

fi

if [ $S1=$S1 ]; then

echo "S1('$S1') egyenlő S1('$S1')-vel"

fi

Page 23: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Hány Anna nevû user van összesen és ezek közül hányan nincsenek

bejelentkezve?

#!/bin/bash

x1=`cat /etc/passwd | grep Anna | wc -l`

x2=`finger | grep Anna | wc -l`

x3=`expr $x1 - $x2`

echo $x3

Page 24: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Linkek

• http://www.gnu.org/software/bash/bash.html• http://www.tldp.org/LDP/abs/html/• http://en.wikipedia.org/wiki/Bash

• http://elmfiz.elte.hu/fizinf/OpRendszerek/bash.html• http://www.inf.u-szeged.hu/~bmse/unix/unix3.html• http://progkor.inf.elte.hu/200506.1/unix.html• http://home.fazekas.hu/~egmont/unix/shell.html• http://www.ibiblio.org/pub/Linux/docs/HOWTO/translations/hu/Bash-

Prog-Intro-HOWTO-hu.txt• http://shell-script-programing.sync.hu/SHELL_PROGRAMOZAS.htm• http://heather.cs.ucdavis.edu/~matloff/UnixAndC/Unix/CShellII.html

Page 25: Linux/UNIX tanfolyam UNIX shell scriptek (½ rész)

Köszönöm a figyelmet!