1 / 25

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

Linux/UNIX tanfolyam UNIX shell scriptek (½ rész). Tar József (Szüri) szurilo@sch.bme.hu 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).

oro
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux/UNIX tanfolyamUNIX shell scriptek (½ rész) Tar József (Szüri) szurilo@sch.bme.hu 2005. november 7.

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

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

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

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

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

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

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

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

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

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

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

  13. Legfontosabb belső parancsok • break Kilép a while, until, for vagy select hurokból • continueA 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.

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

  15. 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 Vezérlési szerkezetek

  16. 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 Vezérlési szerkezetek

  17. Case szerkezet: Case word in minta1) parancsok ;; minta2) parancsok ;; esac case $# in 1) echo 1 ;; 2) echo 2 ;; *) echo sok esac Vezérlési szerkezetek

  18. #!/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/bash if test $# -le 5  then echo Az argumentumok szama kisebb vagy egyenlo mint 5.  else echo Az argumentumok szama nagyobb mint 5. fi Egyszerű scriptek

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

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

  21. 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ásaecho $fac

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

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

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

  25. Köszönöm a figyelmet!

More Related