Anda di halaman 1dari 14

Opercis rendszerek I.

- UNIX felhasznli ismeretek s hjprogramozs

Alapfogalmak a hj (shell) hasznlathoz


1. A shell - definci s tpusok.......................................................................................................1
Alias-ok (helyettest nevek)..................................................................................................4
2. A parancsvgrehajts ..................................................................................................................4
3. A shell vltozi ...........................................................................................................................5
A {} jells ............................................................................................................................6
Az echo parancs .....................................................................................................................7
Az export parancs ..................................................................................................................9
5. tirnytsok s csvezetkek ....................................................................................................9
6. A parancs behelyettests...........................................................................................................12
7. A parancssor trsa...................................................................................................................13

1. A shell - definci s tpusok


1.1 A shell
A shell egy idben egy interaktv parancs vgrehajt s egy programozsi nyelv (interpretlt szkript
nyelv).
Az interpretlt (rtelmezett) nyelvek olyan programozsi nyelvek, amelyeknl a futtats eltt nem
lltanak el gpi kdot. Magt a programszveget rtelmezi egy "rtelmez" program, a mi
esetnkben ez maga a shell.
A UNIX parancsrtelmezjt magyarul hj-nak vagy burok-nak is nevezzk (mert a felhasznl
szempontjbl "krlveszi" az opercis rendszer magjt. A tanfolyam folyamann mi a hj vagy
shell megnevezseket fogjuk hasznlni.
Tbb vltozata ltezik, ezek a UNIX fejldsnek klnbz szakaszaiban jelentek meg.
Bourne (a programot tartalmaz binris kd neve a rendszeren: sh) shell
A UNIX els veiben a shell "programozsi nyelv" jellege nem volt annyira hangslyos,
elssorban a parancsok futtatst oldotta meg. A Bourne shell volt az els parancsrtelmez
amelyiket kimondottan arra fejlesztettk, hogy szkript nyelv is legyen egyben. 1977-ben
fejlesztettt az AT&T-nl (els fejleszt Stephen Bourne). Ezzel vezettek be sok j lehetsget
elszr, mint a parancssor behelyettestse, a 2-es jel hasznlata a standard hibakimenet
jellsre. A ksbbi vekben is az AT&T-nl fejlesztettk.
Korn (ksh) shell
Ezt a vltozatot ugyancsak az AT&T-nl fejlesztettk tovbb (David Korn), s a
legfontosabb fejlesztsi cl a shell programozsi nyelvv val talaktsa volt. Visszafel
kompatibilis maradt a Bourne shell-el. Sok j lehetsget vezettek be, gy az asszociatv
tmbket, s a vals szmokkal val szmtst. A POSIX standard "Shell Language
Standard" nev elrsait pontosan betartja, ezrt leginkbb ezt hasznljk ipari standard
shell-knt a UNIX varinsokban. Eleinte az AT&T tulajdonban volt a fejlesztse, 2000-ben
nylt forrskdv tettk s jelenleg Common Public Licence licenc alatt fejlesztik. Annak
ellenre, hogy a mindennapi munkban sokan ennek modernebb vltozatait vagy a Bash-t
hasznljuk, UNIX karbantart vagy installl szkriptekben legtbben ma is a Bourne vagy a
Korn rgi vltozatait futtatjk.
C shell (csh)
1

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

A C Shell-t a BSD fejleszts sorn fejlesztettk (Bill Joy, a ksbbi Sun Microsystems
alapt). Amint nevbl kiderl, szerkezetei hasonltanak a C-re. Ebben fejlesztettk tovbb
a feladatok (jobs) felgyelett biztost szerkezeteket. Nem annyira hasznlt mint a Bournera pl vltozatok. Jelenleg tcsh nev modern vltozatt hasznljk, s leginkbb a BSD
alap rendszereken felhasznlinl gyakori a hasznlata.
Bash (bash)
A Bash (Bourne again shell) vltozatot eleve nylt forrskdnak kezdtk fejleszteni. A
kompatibilits szempontjbl mind a Bourne, mind Korn shell-t kveti, s sok ezekre rt
szkript lefut mdosts nlkl a bash-en is. Mindhrom elzleg emltett shell-bl vett t
megoldsokat, de fejlesztett sajt nyelvi lehetsgeket is. Modern Linux-okon ltalban ez az
alaprtelmezett shell, s valszn, hogy a leggazdagabb programozsi lehetsgeket ez
nyjtja. A bibliogrfiban emltett "Learning the bash shell" cm knyv rszletesen
bemutatja nyelvi lehetsgeit.
Azt, hogy egy rendszeren melyiket lehet hasznlni, a /etc/shells llomny tartalmbl tudhatjuk
meg. Ez pl. Fedora disztribci alatt az albbi mdon nzhet ki:
$cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
/bin/tcsh
/bin/csh
/bin/ksh

Lthat, hogy a rendszeren egyszerre tbb shell lehet. A Linux alatt tbbnyire a Bash shell-t
hasznljuk, de a tbbi is ott szokott lenni a gpen. A legtbb programhoz viszont a Bourne shell al
rjk a telept, indt, stb. szkripteket. Az iparban nagyon sok helyen a Korn shell-t hasznljk mint
standardot, ezt standardizlja a POSIX is.
A felhasznl ltal hasznlt alaprtelmezett shell-t a rendszer a /etc/passwd llomny
felhasznlt ler sorban tallja meg.
A tanfolyam sorn igyeksznk klasszikus elemeket hasznlni, amelyek a Bourne s Korn hjakra
plnek. Megemltjk, ha egy-egy jellegzetessget csak a Korn vagy Bash nyjt.

1.2 Shell programok


Egy hjprogram llomny (vagy shell szkript) egyszer szveges llomny, amelyet a shell
soronknt rtelmez. Minden egyes sort kln parancsnak vesz (mintha a parancssorrl tttk volna
be), s egyenknt vgrehajtja ket. A parancssor formtumt lttuk mr a terminl hasznlatakor: a
parancs nevbl, kapcsolkbl s argumentumokbl ll.
A shell szmra a megjegyzst deklarl karakter a # (ketts kereszt, angol: hash mark). Azokat a
sorokat amelyekben megjelenik a ketts kereszt karaktertl a sor vgig megjegyzsnek tekinti a
shell (az albbi pldban a shell kszenlti jele a $).
$ #itt rendezzk az llomnyt
$ sort szoveg.txt

A shell program els sora specilis lehet. Itt adhatunk meg informcit arrl, hogy a szveges
llomnyt milyen rtelmezvel szeretnnk vgrehajtani. Ez gy trtnik, hogy ez a sor egy olyan
megjegyzst tartalmaz, amelyben a ketts keresztet azonnal egy felkiltjel kvet (teht: #!ll ott),
utna pedig a kvnt rtelmez teljes elrsi tja.
2

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

gy egy egyszer szkript (hello.sh) gy nz ki:


#!/bin/bash
echo hello
echo vege

(a #! szimblumok s az elrsi t a modern elrsok szerint szorosan kvetik egymst, rgi


hjakben hasznlatos volt a sznet is kztk. A hivatkozott rtelmez program teljes elrsi tjt
meg kell adni, mint: /bin/bash vagy /bin/sh )
Vgrehajtva az albbit ltjuk:
$ bash hello.sh
hello
vege
$

A vgrehajts teht azt jelenti, hogy elindtjuk a shell-t (s ez egy j shell lesz) gy, hogy
argumentumknt (amelyet bemenetnek hasznl) megadjuk a programot tartalmaz llomnyt.
Amennyiben a bash-t megjell sor hinyzik, a shell megprblja a szveget a felhasznl szmra
belltott alaprtelmezett shell-el vgrehajtani (ennek nevt a $SHELL krnyezeti vltoz
tartalmazza). A kt echo helyn brmilyen hossz szveg llhat, egyms utni parancssorok
amelyeket a shell egyms utn: mindig az elz lefutst megvrva hajt vgre.

1.3 Shell parancsok


Amikor a shell megkap egy parancsnevet, az albbi kategrikban kezdi keresni:
-beptett parancsok - a nagyon gyakran hasznlt parancsokat beptik a shellbe. gy ezeket sokkal
gyorsabban lehet vgrehajtani. Ilyen pldul az echo, pwd, history, test. Ugyanakkor ezek
lteznek nll parancsknt is (binris program).
-fggvnyek - a shell nyelvn fggvnyeket lehet meghatrozni az olyan feladatokra amelyeket
tbbszr hvunk meg. Ezekkel ksbb foglalkozunk.
-kls parancsok - azok a parancsok amelyek programok formjban valahol az
llomnyrendszerben tallhatak.
-alias-ok: helyettest nevek vagy pszeudo parancsok (lsd albb)
A hjba ptett parancsokra lerst a Linux rendszerekben a help paranccsal kapunk. A help
argumentum nlkl a beptett parancsokat, argumentummal egy parancs segdlett listzza. Teht
a man echo a UNIX kls echo-jnak, a help echo pedig a bels echo segdlett rja ki. Bash
alatti futtatsnl az ugyanolyan nev beptett parancs fut a kls helyett (ha nem hivatkozunk a
klsre specilisan).
A kls parancsok programokat jelentenek, amelyeket a shell meg tud keresni az
llomnyrendszerben, s a shell-t futtat felhasznlnak vgrehajtsi joga van rejuk. Ezeket a
$PATH krnyezeti vltozban lert tvonalakon keresi a shell.
3

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

Alias-ok (helyettest nevek)

Az alias-ok vagy helyettest nevek arra szolglnak, hogy a gyakran hasznlt, tbb kapcsolval
meghvott programoknak egy helyettest nevet adjunk, s gyorsabban, egyszerbben hivatkozzunk
rjuk. Jellegzetes plda a Linuxon az ls parancsot helyettest alias, amely sznes kirssal hvja
meg az ls-t. Ltrehozsa az alias paranccsal trtnik:
$ alias ls='ls --color=tty'

Amint lthat, az alias ltrehozs tulajdonkppen a nvnek egy karakterlncot feleltet meg, s
meghvsakor ez helyettestdik a parancssorra. A helyettest neveknek elsbbsgk van az
ugyanolyan nev parancsokhoz kpest amikor meghvjuk ket.
Trlsk az unalias , listzsuk egyszeren az alias paranccsal trtnik.
$ unalias ls

2. A parancsvgrehajts
Hogyan fut le egy egyszer parancsvgrehajts? Beptett parancsok esetben a fut shell vgzi ezt.
Kls parancsok, azaz programok futtatsa sorn az albbi trtnik:

Amikor a shell elfogadja a parancsot s elindtja, azt mondjuk, hogy egy j folyamat jn ltre: a fut
shell fi folyamata. Amikor a program kdja betltdik, a kdon kvl az opercis rendszer tbb
informcit ltrehoz illetve kvet: ezeket egytt folyamatnak nevezzk. Teht egy fut programot
mindig folyamatknt fogunk emlegetni. A parancsvgrehajtsnl j folyamat keletkezik, amelyben a
shell vgrehajtja a parancsot. Ugyanakkor a fut shell maga is egy folyamat.
Egy parancssoron (az j sor elvlaszt karakterig tart karakterlnc) ltalban egy programot
indtunk el. Megtehetjk, hogy tbbet indtsunk el egyszerre, ha kztk a ; -t hasznljuk mint
elvlaszt jelet.
$ echo "rendezes indul" ; sort szoveg.txt;

echo "vege"

Ilyenkor a msodik parancs megvrja az elst, teht nem prhuzamosan hajtdnak vgre.
A parancssoron elindtott programrl azt mondjuk, hogy "eltrben fut"; mivel a terminlra r, s
ilyenkor a shell nem adja vissza a kszenlti jelet (prompter): azt jelzi ezzel, hogy nem fogad el j
parancsot az elz befejezsig.
Megtehetjk, hogy a parancsot "httrben" futtassuk; ilyenkor a shell visszaadja a kszenlti jelet,
4

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

s j parancsot thetnk be. A httrben futtatst ktflekppen vlthatjuk ki:


1) a parancssort a parancs indtsakor az & jellel zrjuk, ilyenkor a folyamat azonnal a httrben
indul;
2) az eltrben fut folyamatot felfggesztjk a suspend jelzssel (^Z kombinci a terminlrl),
majd a bg (background) paranccsal httrben indtjuk.
A jelzsek tulajdonkppen szoftver tjn kldtt megszaktsok: a felfggeszts tipikus plda erre.
Lenyomunk egy billentyt amely valamilyen megszakts kzvettsre hasznlunk, s azt a shell
rendszert vezrl kernel-en keresztl eljuttatja a folyamathoz.
Mindkt esetben a shell 2 szmot, egy feladat (job) azonostt illetve egy folyamat azonostt r ki
szmunkra.
$ sort rendezetlen.txt > rendezett.txt &
[1] 4467
$

Ezek segtsgvel hivatkozhatunk ksbb az elindtott munkra, pldul az eltrbe hvhatjuk az fg


(foreground) paranccsal.
A munkk illetve folyamatok kezelsvel, valamint ezek klnbz indtsi mdjval ksbb, a
Folyamatok kezelse c. fejezetben foglalkozunk, itt csak rviden adtuk meg az elindtsukhoz
szksges szintaxist.
Egyelre az albbit kell megjegyezni: parancs indtskor mindig egy j shell indul el. Ez futtatja a
megadott parancsot, s tveszi a futtat shell tulajdonsgait: ugyanarra a standard kimentre r,
ugyanarrl a bemenetrl olvas, ugyanabban a munkaknyvtrban dolgozik s megkapja az indt
shell krnyezeti vltozit.
A fenti pldaprogramot (hello.sh) egyszerbben is indthatjuk. Mivel a shell elindt brmely
szveges llomnyt ha az vgrehajthat s megadtuk az rtelmez programjt, egyszeren
vgrehajtsi jogot adunk r, s az llomny nevvel - mint parancsnvvel indtjuk. Termszetesen
ilyenkor is elindul egy j shell, a program szveget rtelmezve:
$ chmod u+x hello.sh
$ ./hello.sh
hello
vege
$

3. A shell vltozi
3.1 Az ltalnos shell vltozk
A shell az adatok, informcik trolsra vltozkat hasznl. Mivel a shell parancsai szvegekbl
plnek fel, a vltozk nevt s rtkt is egyarnt sztringekben trolja. A nv-rtk hozzrendelst
egyszeren az = jel segtsgvel adjuk meg. Pldul a
$ szin=piros

sor vgrehajtsa sorn ltrejn az a szin vltoz piros rtkkel. Lthat, hogy a vltoz
ltrehozsa dinamikus: akkor jn ltre amikor deklarlom, nincs szksg elzetes defincira.
Amikor a ltrejtt vltozt ksbb shell parancsok argumentumaiban hasznljuk, egy $ jellel s a
vltoz nevvel hivatkozunk r. Teht $szin lesz a hivatkozott vltoz, s ezt gy hasznljuk:
5

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs


$ echo $szin
piros

A vltozk teht sztringeket tartalmaznak, gy megtrtnhet az is, hogy nincs rtkk (res sztringet
tartalmaznak).
A vltozk rtkt idzjelek kz is tehetjk, st, ha a vltoz rtke olyan sztring amelyik
elvlaszt karaktert is tartalmaz, akkor ktelezen ezt kell tennnk. Pldul, ha egy vltoz rtke a
piros alma karaktersor, akkor ezt gy kell megadni:
$valt="piros alma"

Egybknt a shell csak a piros sztringet rendeln a vltozhoz s gy rtelmezn, hogy az alma egy
kvetkez parancs rsze.
A vltozk neve az angol Abc betibl (kis s nagybet kzti eltrs szmt) valamint a
szmjegyekbl s a _ alhzsjel karakterbl llhatnak.

3.2 Az idzjelek hasznlata s az echo parancs


Hromfle idzjelet hasznlhatunk a shell programokban: " (idzjel, double quote), ' (aposztrf,
single quote vagy forward tick) s ` (vissza idzjel, backtick).
A ' egyes idzjel vagy aposztrf segtsgvel olyan sztringeket deklarlunk, amelyekben minden
egyes karakter elveszti a shell szerinti metakarakter jelentst, s bet szerint lesz rtelmezve. Teht
az albbi kirskor:
$ $ echo -e 'ez itt egy $ jel'
ez itt egy $ jel
valdi $ kerl a kimenetre. A shell nem r t semmit a sztring belsejben, gy dolgozik vele ahogy

lertuk.
A " ketts idz jelet is sztringek deklarlsra hasznljuk. Amikor egy sztringet ketts idzjellel
vesznk krl, akkor a shell a sztring belsejben a vltozk nevt trja, s gy hasznlja fel ket a
tovbbiakban.
$ szin=piros
$ echo "$szin alma"
piros alma

A harmadik idz jelet, a vissza-idzjelet az un. parancs behelyettests vgrehajtsra hasznljuk,


lsd albb.
A {} jells

Mivel ilyen esetekben elfordul, hogy a shell nem tudja a vltoz nevt meghatrozni, pldul
albbi esetben, ha a "pirosalma" szveget akarjuk kirni:
$ echo "$szinalma"

(meddig tart a vltoznv? a shell gy fogja rtelmezni, hogy egy j vltoz nevet hasznlunk, a
$szinalma nevt), ltezik egy jellsi md ami ezt egyrtelmv teszi. Ilyenkor a vltoz nevt
jelent karaktereklncot {} zrjelekkel vesszk krl. gy mr egyszer kifejezni a vltozt:
$ echo "${szin}alma"

A jells mg nhany tovbbi kirtkelst is lehetv tesz a kapcsos zrjelek kztt:


${szin:-piros}
ha a vltoz nem ltezik, nem ad rtket a vltoznak, de visszatrti a
"piros"-at
${szin:=piros}

ha a vltoz nem ltezik, rtket a vltoznak s visszatrti a "piros"6

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

at
${szin:?hibas szin}

ha a vltoz nem ltezik a shell program hibazenettel lell

Az albbi kis programban (szin.sh) nem adunk rtket a $szin vltoznak, gy els hasznlatkor
automatikusan felveszi azt:
#!/bin/sh
echo ${szin:=piros}
echo $szin
exit 0

Elindtva a program ktszer fogja a "piros" sztringet kirni:


$bash szin.sh
piros
piros
$

Az echo parancs

Az echo parancs kirja sajt argumentumainak listjt s utna automatikusan egy j sor karaktert.
echo argumentum_lista
$ echo ez egy zenet
ez egy zenet

Kt kapcsolja van:
-n nem r j sor karaktert
-e engedlyezi a kvetkez specilis karakterek rtelmezst a karakterlnc okban:
\a riad (cseng)
\b egy karakter trlse visszafel
\c nem r ki jsor karaktert
\f lapdobs
\n j sor
\r kocsi vissza
\t vzszintes tabultor
\v fggleges tab
\\ backslash
\nnn a karakter ASCII kdja nnn (oktlisan)
\xnn a karakterkdot hexadecimlisan lehet megadni, pl. \x32

Az echo a leggyakrabban hasznlt parancs a hjprogramokbl val kirsra.


A shell rendelkezik ugyanakkor egy printf paranccsal is, amelyet ritkbban, abban az esetben
hasznlunk, ha bonyolultabban kell formatlnunk a kimenetet. Meghvsa az albbi:
printf formatl_sztring argumentumlista
A formatl sztring megegyezik a C nyelvbl ismert printf szintaxisval, a kirt argumentumokat
pedig a formtum utn, egy listban kell felsorolni, elvlasztjelek nlkl. A printf nem r ki
automatikusan j sort, ezt meg kell adnunk egy \n karakterrel, akr a C nyelvben.

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs


$ printf "Ez egy %s alma\n" $szin
Ez egy piros alma

3.2 A krnyezeti vltozk


Egy folyamat krnyezete mindazt az informcit jelenti, amit a folyamat az t futtat opercis
rendszerrl, gprl, belltsokrl megtudhat. Ezeket az informcikat tbbnyire vltozkban
troljuk (nv-rtk prok). Ezek a vltozk ltrejnnek a shell indtsakor, s gy fr hozzjuk mint
sajt vltozihoz. Tbbnyire nagy bets vltoz nevekkel brzoljuk ezeket, klnbsget tve gy (a
programoz szmra) a sajt, illetve az opercis rendszertl kapott vltozk kzt. Ilyen vltozt
mr lttunk: pldul a vgrehajthat llomnyok elrsi tja, a PATH vltoz.
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/lszabo/bin:.

Nhny krnyezeti vltozt az albb sorolunk fel. A belltott vltozkat a printenv paranccsal
lehet kilistzni. Pldul az albbi vltozk szinte minden gpen be vannak lltva:
HOSTNAME=eowyn.maros.emte.ro
TERM=xterm
SHELL=/bin/bash
USER=lszabo
MAIL=/var/spool/mail/lszabo
PATH=/bin:/usr/local/bin:/bin:/usr/bin:/home/lszabo/bin:./
PWD=/home/lszabo
EDITOR=/usr/bin/vim
LANG=en_US.UTF-8
HOME=/home/lszabo
LOGNAME=lszabo

3.3 A shell indtsa


Indtskor a shell vgigolvas nhny konfigurcis llomnyt, ezek vltozkat llthatnak be illetve
programokat indthatnak, amelyek meghatrozzk azt a krnyezetet amelyben a shell indul. Ezek
kzt vannak olyan llomnyok amelyek kzsek, teht brmely felhasznl belpsekor
rtelmezdnek (/etc/profile, /etc/bashrc). Ezen kvl minden felhasznlnak sajt indt
llomnyai vannak a home knyvtrban (.profile, .bash_profile, .bashrc). Ezeket
szabadon szerkesztheti, s amennyiben indtskor automata mdon akar vltozkat, alias
defincikat, stb. belltani, azt innen teheti meg.
A a .profile s .bash_profile llomnyok minden egyes belpsnl rtelmezve lesznek (a
megadott sorrendben). gy lehet pldul a PATH vltoz rtkt megvltoztatni. Amennyiben azt
szeretnm, hogy a munka knyvtram (./) is legyen a keresett knyvtrak kzt a parancsok
elindtsnl, az albbit kell bernom a .bash_profile llomnyba:
PATH=$PATH:./
export PATH

Az els sor tlltja (jra deklarlja) a PATH vltozt: a rgi mg odailleszti az elvlaszt
karaktert (:) s utna a pillanatnyi munkaknyvtr nevt, majd az export shell utastssal berja a
krnyezeti vltozk kz, gy, hogy azt az ltalam indtott folyamatok is rkljk.
A bash esetben kilpskor egy .bash_logout nev llomny tartalma rtelmezdik, ebbe
rhatunk be rutin feladatokat, amelyeket kilpskor kell vgrehajtani.

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

Megjegyezs: a fenti konfigurcis llomny nevek a Bash-re rvnyesek.


Az export parancs

Amikor egy vltozt ltrehozunk (pl. a fenti pldban az j PATH vltozt), ez csak a hj szmra
lesz lthat, a hjbl indul parancsok szmra nem. Az export berja a hjvltozt azok kz a
krnyezeti vltozk kz, amelyeket minden ms ltalam indtott parancs is megkap.

3.4 Nyelvi karakterkszlet belltsa (LANG, LC_ )


A shell karakterkszletnek belltsa fontos, amennyiben pldul a magyar nyelv karaktereit
akarjuk hasznlni. Ezt a LANG illetve az LC_ kezdbetket tartalmaz shell vltozkkal tehetjk.
Kt paramtert kell ilyenkor belltani: a karakterkdolst (encoding) s a nyelvet, esetleg orszgot
amelyben az illet nyelvet beszlik.
Az LC_ nev vltozkkal (LC_ALL, LC_TIME, LC_NUMERIC) a nyelven kvl klnbz helyi
belltsokat lehet megadni (id, szmok formatlsa).
A nyelvi belltst, amennyiben nincsenek LC_vltozk megadva, elsdlegesen a LANG vltoz
adja meg, ennek lehetsges rtkeit (ami fgg attl, hogy fel vannak-e teleptve a szksges
szoftverek a rendszerre), a locale -a paranccsal lehet kilistzni. Ez pldul egy fedora Linux
rendszeren a magyar nyelvi belltsokra az albbi lehetsgeket listzza:
hu_HU
hu_HU.iso88592
hu_HU.utf8
hungarian

Az UTF-8 kdols hasznlata ma mr jelentsen megknnyti ezeket a belltsokat.

4. A shell specilis vltozi


A shell tbb specilis vltozt tartalmaz, amelyek minden esetben automatikusan ltrejnnek.
Tbbnyire olyan informcikat fognak tartalmazni amelyek minden programra jellemzek s
gyakran hasznljuk ket. Nhnyat megemltnk itt rszletesen, a tbbit ahogy haladunk az
anyaggal.
Ezeknek a vltozknak a nevt tbbnyire gy alaktottk ki, hogy a $ karakter utn felhasznltak
mg egy specilis karaktert. gy pldul a parancssor argumentumait a $1, $2, ... $9 vltozkkal
lehet elrni egy shell programbl. Ezek a kapcsos zrjeles szintaxissal is hasznlhatak. Az albbi
szkript pldul kirja els s harmadik argumentumt.
#!/bin/bash
echo $1
echo ${3}

A tbbi specilis vltozt ksbb vezetjk majd be, ahogy hasznlatra kerlnek. Listjukat
megtallhatjuk a Fggelk 2. pontjnl.

5. tirnytsok s csvezetkek
Emlkeztetnk a standard bemenet, kimenet s hibakimenet fogalmra egy fut programnl.
Mindhrmat llomnyknt kezeli a shell (akrcsak a C nyelv). Jellskre egsz szmot tartalmaz
azonostkat hasznl a C nyelv akkor, amikor els szint llomnykezel fggvnyeket hasznl.
9

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

0 - standard bemenet
1 - standard kimenet
2 - standard hibakimenet.
Ezeket az azonostkat a hj is hasznlja.

5.1 tirnytsok
Az tirnytsok pldinl a sort , cat , head, tail parancsokat hasznljuk. Ezeket laboron
vesszk t, lersuk megtallhat az elads honlapjn.
A hj szintaktikailag nhny szimblumot hasznl a standard bemenet s kimenet illetve
hibakimenet tirnytsra. Ezek hasznlata s jelentse az albbi:
A standard bemenet megvltoztatsa a < jellel: az albbi pldban a sort program bemenete nem
a standard bemenetrl jn, ahogy az a sort egyszer futtatsnl tenn, hanem a lista.txt nev
llomnybl.
sort < lista.txt

A standard kimenet llomnyba irnytsa a > jellel: az albbi pldban a sort program nem a
terminlra, hanem a rendezett.txt nev llomnyba r, de a standard bemenetrl olvas:
$ sort > rendezett.txt
b
a
$ cat rendezett.txt
a

Megjegyzend, hogy a > llomnyba irnyts trli a rgi llomnyt ha ilyen nev mr ltezik.
A kt tpus tirnytst akr egyszerre is hasznlhatjuk:
sort < lista.txt > rendezett.txt

A kimenet hozzfzse egy llomnyhoz a >> jellel: ezzel az tirnytssal hozzfzs mdban
runk a kimeneti llomnyba, teht az llomny tartalma amennyiben ltezik megmarad, s az j
sorok az llomny vgrekerlnek.
$ echo elso > f
$ echo masodik >> f
$ echo harmadik >> f
$ cat f
elso
masodik
harmadik

5.2 Csvezetkek
A csvezetkek az opercis rendszer ltal ltrehozott kommunikcis csatornk, amelyeken
keresztl egy folyamat kimenete egy msik bemenetre irnythat egy rendkvl egyszer
szintaxissal a parancssoron. A deklarlshoz hasznlt jel a | elvlasztjel. Az albbi pldban a
cat kimenett a sort-ba irnytjuk (a sort parancs egyszeren rendezi a bemenetre kerl
szveges llomny sorait s trja a kimenetre - rszletes hasznlatval ksbb foglalkozunk):
$ cat lista.txt | sort

10

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

A kt folyamat adatai kzti szinkronizcirl az opercis rendszer gondoskodik. Az emltett


tirnytsok tbbszr is alkalmazhatak ugyanazon a parancssoron. Az albbi parancssoron a
lista.txt llomny a cat-bl a sort-ra, onnan pedig a head parancs bemenetre kerl, s vgs
kimenetknt csak a rendezett lista els sort ltjuk (csak ez rdekel minket):
$ cat lista.txt | sort | head -1

Ebben az esetben a sort teljes kimenete nem kerl lementsre, csak a kvnt vgeredmnyt kapjuk
meg.
Itt emltjk meg a tee parancsot, amely sorozatos feldolgozs esetn biztosthatja egy kztes
kimenet elmentst, ha arra ksbb szksg lehet. A tee hasznlata az albbi:
tee [-a] llomnynv

amelynek hatsra a bemenetet a kimenetre s az adott nev llomnyba rja. Az albbi esetben
elvgzdik ugyanaz a feldolgozs mint a fenti pldban, de ezttal a sort ltal ellltott teljes
rendezett lista is elmensre kerl:
$ cat lista.txt | sort |tee rendezett.txt | head -1

5.3 Specilis eszkzk


Bizonyos esetekben hasznos ha llomnyokon kvl eszkzket is hasznlhatunk a ki-s bemenetek
tirnytsakor. Ilyen pldul a /dev/null eszkz, amely vgtelen sok karaktert teljesen elnyel
kimenetknt viselkedik. Erre lehet minden olyan kimenetet irnytani, amelyre nincs szksg:
jelenlte felesleges vagy zavar. Pldul az albbi parancs esetben az abc knyvtr tartalma
listzdik ha van ilyen. Amennyiben nincs, az ls hibazenett elnyeli a null perifria s nem
ltunk semmit.
$ ls abc 2 > /dev/null
$

5.4 A 2>&1 tirnyts s a naplzs


Vannak esetek, amikor mindkt programkimenetet (kimenet s hibakimenet) ugyanabba az
llomnyba akarjuk irnytani. Ilyenkor az egyik megolds a feladatra az albbi:
-a kimenetet egy llomnyba irnytjuk
-utna a hibakimenetet a kimenetre
$ sort rendezetlen.txt
$

>

naplo.txt

2>&1

Ilyenkor nylvn semmit sem ltunk a terminlon, minden kirt szveg (akr eredmny, akr hiba) a
naplo.txt nev llomnyba kerl, s onnan olvashatjuk el ksbb. A parancs lefutst pedig
nyilvn meg kell vrnunk (nincs kszenlti jel csak ha a sort lefutott). Ilyenkor megtehetjk, hogy a
feladatot a httrben futtatjuk (hiszen amgy sem ltunk semmit), az albbi parancsindtssal:
$ sort rendezetlen.txt > naplo.txt 2>&1 &
[1] 5039
$
gy azonnal j paranccsal foglalkozhatunk, nem kell a sort vgre vrnunk. A parancs lefutsnak

eredmnye, hibi pedig egy llomnyban lesznek rgztve: az ilyen llomnyokat amelyeket
ksbbi felhasznlsra rgztnk neveznk naplnak (log file).
Van olyan eset, amikor a kt kimenetet ugyanabba a csvezetkbe szeretnnk irnytani, ezt az
albbi megoldssal rjk el:
$ sort rendezetlen.txt 2>&1
$

cat

> eredmeny.txt

11

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

Elszr a hibakimenetet a standard kimenetre irnytjuk, majd a standard kimenetet vezetjk egy
csvezetkbe. Utna a csvezetkket egy msik program, jelen esetben a cat bemenetre.

5.4 Here document ("itt dokumentum")


A kvetkez tirnyts mr nem a parancssorra, hanem a shell programokra jellemz. Segtsgvel
a shell program bemenete tirnythat arra az llomnyra amelyben a shell program van.
Hasznlati mdjt az albbi tbb soros szveg adja meg:
parancs << VEGE
itt brmilyen
szveg
llhat
VEGE

A parancs vgrehajtsa utn (ez brmilyen UNIX parancssor lehet), a shell a parancs bemenett a
sajt programszvegre irnytja (az "itt brmilyen szveg llhat" sorra vagy sorokra), s a parancs
addig olvas innen, amg egy sor elejn ugyanarra a karakterlncra akad, amely a << jel utn ll. Itt
abbahagyja az olvasst, s a shell vgrehajtja a kvetkez soron lev parancsot. Az albbi shell
program (phone.sh) egyszeren kir egy telefonszm listt:
1
2
3
4
5
6
7
8
9

#!/bin/bash
cat << VEGE
Laci
0756-453-675
Peter
0744-456-436
Johanna 0722-567-890
VEGE
echo ez mar nem "here document" kiiras

Vgrehajtsakor az albbit ltjuk:


$ bash phone.sh
Laci
0756-453-675
Peter
0744-456-436
Johanna 0722-567-890
ez mar nem here document kiiras
$

Mikzben a szveg tkerl az t olvas programhoz (a cat-hez ebben a pldban), a shell


ugyangy trja, mintha "" ketts idzjellel krlvett sorok lennnek: teht amennyiben a
szvegben vltozk is vannak, azok trsra kerlnek.
Fontos: a VEGE jelet tartalmaz lezr sorban akrmilyen szcska llhat, de a sornak csak ezt az
egyetlen szt kell tartalmaznia a sor elejn.

6. A parancs behelyettests
Parancs behelyettestsnek azt a mveletet nevezzk, amely sorn a shell lefuttat egy parancsot, s a
parancs kimenett (standard kimenet) mint egyetlen karaktersort egy vltozhoz rendel.
Kt jellst hasznlunk erre, egy hagyomnyosat s egy modernebbet.
Hagyomnyos jells:
vltoz=`parancsor`

teht ilyenkor a kt vissza idzjel (back tick) veszi krl azt a parancssort, amelyet futtatunk.

12

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

A modernebb jells:
vltoz=$(parancssor)

Mindkt jellssel lefuttatott hozzrendels ugyanazt az eredmnyt idzi el. Amint azt tapasztalni
fogjuk, a $() jells jobban olvashat, ezrt ezt ajnlott hasznlni, de a gyakorlatban mindkettvel
ugyanolyan mrtkben tallkozunk.
Az albbi pldban az els parancssor echo kimenete nem a kimenetre kerl, hanem az zenet
vltozba:
$ uzenet=` echo "ez a kiirni valo" `
$ echo $uzenet
ez a kiirni valo

Ugyanazt rjk el az albbi jellssel:


$ uzenet=$( echo "ez a kiirni valo" )
$ echo $uzenet
ez a kiirni valo

A fenti pldban az echo kimenete egy egy soros karakterlnc volt. Amennyiben nem gy van, s a
kimenet tbb sorbl ll, a shell trja az j sor karakter elvlasztt egy szkz karakterr. Ilyenkor
egy karakterlncokbl ll, szkzzel elltott listt rendel a vltozhoz. Pldul az ls -1 (ez gy
listz, hogy minden egyes llomnynv kln sorba kerl) parancs kimenett vltozba rva egy
llomnynv listt kapunk:
$ ls -1
alma.sh
hello.sh
phone.sh
$ lista=$( ls -1 )
$ echo $lista
alma.sh hello.sh phone.sh
$

7. A parancssor trsa
A shell a parancssort vgrehajts eltt "trja": ha vannak benne olyan szerkezetek vagy
metakarakterek amelyeket a vgrehajts eltt behelyettesthet, akkor megteszi azt.
A metakarakterek olyan karakterek, amelyek mst jelentenek a shell szmra mint bet szerinti
jelentsk.
Egyelre az albbiakkal tallkoztunk:
*

a munkaknyvtrban lev llomny neveket rja be helyette

a home knyvtr elrsi tjt jelenti (pl. /home/lszabo/ , ezt rja be a tilda helyett)

a kzvetlenl utna kvetkez karakterlncot vltoznvnek tekinti

A metakaraktereket lehet literlis rtelemben is hasznlni a parancssoron, de ekkor backslash


13

Opercis rendszerek I. - UNIX felhasznli ismeretek s hjprogramozs

jellssel kell megadni vagy aposztrf kz kell zrni ket (gy karakterlncot adunk meg). Egy * ot gy runk ki a terminlra:
$ echo \*
*
$ #vagy:
$ echo '*'
*

A hj bonyolultabb folyamatok kzti sszefggseket is ltrehoz amikor a parancssort kirtkeli,


ezrt ksbb mg visszatrnk a parancssor trsra.

14

Anda mungkin juga menyukai