Ki- és bemenetek
átirányítása,
különleges shell parancsok
A UNIX operációs
rendszerben a felhasználó
belépésekor egy ún. shell (burok, héj)
program indul el.
A shell program fogadja a
parancsokat és --- részben
átalakítva --- továbbadja azokat az egyes
speciális programoknak.
A shellen belül
megteremtették a programok
összekapcsolásának lehetõségét
is, mivel általában minden program innen indul el.
Parancs kimenetének
átirányítása
Egy program
végeredményét egy
állományba is beleírhatjuk a
képernyõ helyett. Ehhez a parancs után egy >
jelet, majd a kívánt file nevét kell
írnunk.
Például:
ls -l > filelista Enter
cat filelista Enter
total 152
-rw-r--r-- 1 zsolt astro 8351
Mar 3 22:45 alap2.txt
-rw-r--r-- 1 zsolt astro 8570
Mar 2 23:16 alap3.txt
-rw-r--r-- 1 zsolt astro 18171
Mar 2 23:14 archive.txt
-rw-r--r-- 1 zsolt astro 4745
Mar 3 22:51 job1.txt
-rw-r--r-- 1 zsolt astro 769 Mar
2 23:14 kommun.txt
-rw-r--r-- 1 zsolt astro 36404
Mar 2 23:49 ksh.txt
-rw-r--r-- 1 zsolt astro 19577
Mar 2 23:19 network.txt
-rw-r--r-- 1 zsolt astro 23165
Mar 2 23:14 szerk.txt
-rw-r--r-- 1 zsolt astro 8766
Mar 2 23:20 tcpip1.txt
-rw-r--r-- 1 zsolt astro 2680
Mar 2 23:20 filelista
Az
átírányítás felülírja
a már létezõ állományt. Ha ehelyett
az állomány végéhez akarjuk az
eredményt
fûzni,átirányításkimenet akkor a
>> jelet kell használnunk.
ls > filelista Enter
ls -l >> filelista Enter
cat filelista Enter
alap2.txt alap3.txt archive.txt
job1.txt kommun.txt ksh.txt
network.txt szerk.txt tcpip1.txt
write.txt
total 152
-rw-r--r-- 1 zsolt astro 8351
Mar 3 22:45 alap2.txt
-rw-r--r-- 1 zsolt astro 8570
Mar 2 23:16 alap3.txt
-rw-r--r-- 1 zsolt astro 18171
Mar 2 23:14 archive.txt
-rw-r--r-- 1 zsolt astro 4745
Mar 3 22:51 job1.txt
-rw-r--r-- 1 zsolt astro 769 Mar
2 23:14 kommun.txt
-rw-r--r-- 1 zsolt astro 36404
Mar 2 23:49 ksh.txt
-rw-r--r-- 1 zsolt astro 19577
Mar 2 23:19 network.txt
-rw-r--r-- 1 zsolt astro 23165
Mar 2 23:14 szerk.txt
-rw-r--r-- 1 zsolt astro 8766
Mar 2 23:20 tcpip1.txt
-rw-r--r-- 1 zsolt astro 2680
Mar 2 23:20 filelista
Bemenet
átirányítása
Nem csak a
képernyõre való kiírást
(az ún. standard outputot) hanem a billentyûzeten
történõ adatbevitelt (standard input) is
átirányíthajuk.
Például a grep
parancs állomány
megadása nélkül a bemenetrõl olvassa a
sorokat, és keresi bennük a megadott szót:
grep 'ben' Enter
Itt nincs a keresett karakter
Enter
Ebben mar van Enter
Ctrl-D
Ebben mar van
Irányítsuk
át a bemenetet a gyakorlas
állományból! Ehhez a < jelet kell
használnunk:
grep 'ben' < gyakorlas Enter
Ebben a sorban mar vannak szamok
is , peldaul az 1 es a 42
Ebben a sorban nehany furcsa
karakter van
Most mindent egyutt
szerepeltetunk ebben a sorban 'vege'
Hiba kimenet
A 2>&1 parancs
segítségével a stderr
fájldeszkriptorhoz tartozó kimenetet kezelhetjük.
Vigyázzunk:
számít a sorrend!
a.out 2>&1 >tmp
a.out >tmp 2>&1
Cső/pipe
A cső/pipe
lehetõvé teszi, hogy egy program
végeredményét egy másik program
használja, külön állomány
létrehozása nélkül.
Egy parancssorban több
átirányítást is
használhatunk, pl. az elsõ
utasítás a bemenetét egy megadott
állományból veszi, majd a második
parancs az elsõ kimenetét (eredményét)
dolgozza fel, végül a harmadik a
második kimenetét továbbalakítva a
végeredményt egy kimeneti
állománybakimeneti állományba írja.
Mindez nagy
közbülsõ
állományokállományok
létrehozása nélkül történik,
ezért sokkal gyorsabb a parancsok egyenkénti
futtatásánál.
Példák:
Kilistázzuk a /bin
könyvtár tartalmát az ls
parancs segítségével és az eredményt
a more segítségével jelenítjük meg:
ls -l /bin | more
A who parancs kiírja az
aktuális
felhasználókat (soronként egyet), a wc -l parancs
pedig megszámolja a sorok számát. Így az
éppen aktív felhasználók
számát a
who | wc -l
adja meg.
Parancs eredményének
továbbhasználata
Bizonyos esetekben
szükségünk lehet egy parancs
eredményére, de nem bemenetként, hanem egy
utasítás argumentumanként. Ilyenkor a
fordított aposztróf karakterek közé kell
zárni a forrásként szereplõ
utasítást: a fordított aposztrófok
közé írt parancs végeredménye
közvetlenül behelyettesítõdik a parancssorba.
Például
more ` grep -l 'egy' * `
parancs minden, az egy
szót tartalmazó
állományt megjelenít a képernyõn.
Parancsállományok
létrehozása
Néha egymás
után többször ugyanazt a
parancssorozatot kell lefuttatnunk. Ilyenkor célszerû
lehet ezt egy állományban, új parancsként
összefoglalni.
Például hozzuk
létre egy
szövegszerkesztõvel a ddir állományt, a
következõ tartalommal:
echo "Most kovetkezik az
allomanylista"
ls -l
echo "Vege van az
allomanylistanak"
Ezután
változtassuk meg az állomány
védelmi kódját futtathatóra:
chmod +x ddirEnter
majd a ddir parancs
egymás után lefuttatja a három
parancsot.
Programok futtatása
A UNIX operációs
rendszerben egyszerre több
parancsunk is futhat párhuzamosan.
A programok az
elõtérben és
háttérben futhatnak.
A háttérben
futó eljárások is
írhatnak a képernyõnkre, de nem kaphatnak
bemenõ adatokat a billentyûzetrõl.
Egy végrehajtható
programot (file-t) a nevével
futtatunk.
PATH környezeti
változóban megadott
könyvtárakat sorra végignézi,
Egy már futó
programot a Ctrl-Z gombok egyidejû
lenyomásával állíthatunk meg.
Az így
leállított program még benne van a
gépben, csak nem fut, bármikor folytatható a
futtatása.
Ha egy programból ki
akarunk lépni úgy, hogy az
befejezze a futást,programmegszakítása a Ctrl-C
lenyomásával tehetjük ezt meg.
A háttérbe tett
(futó vagy
megállított) programokat a jobs paranccsal
nézhetjük meg.
linux $ jobs
[1]-
Running
mozilla &
[2]+
Stopped
mutt
A programokat az fg (foreground)
paranccsal elõtérbe, a
bg (background) paranccsal háttérbe tehetjük.
A parancsoknak meg kell adni,
hogy melyik programot akarjuk elõ-
vagy háttérbe tenni. Ha nem adunk meg
azonosítót, akkor a parancs az aktuális programra
hat. Pl. a 2-es számú program
háttérben való továbbfuttatása a
bg %2 Enter
paranccsal történik.
Egy parancsot futtathatunk
azonnal a háttérben. Ehhez a
parancs legvégére tegyünk egy & jelet.
A háttérben
futó parancsok kisebb
prioritással bírnak, s így terhelt rendszeren
lassabban futnak le. Ha sokan futtatnak a rendszeren,
célszerû más módon elküldeni a
futtatásokat (queue rendszer).
A háttérben
indított parancsok befejezik
futásukat, ha kijelentkezünk a géprõl.
Ha ezt el akarjuk kerülni,
akkor a háttérbe
küldendõ parancs elé be kell írni a nohup
parancsot:
nohup ProgramKimenetiFile Enter
Például a következõ parancs a
háttérben futva a lista állományba
beleírja az összes, az adott könyvtárban
és az alkönyvtárakban található
hello.c állomány nevét:
nohup find . -name hello.c -print > lista & Enter
Minden futó eljárásnak a rendszerben van egy
azonosító száma, az ún. PID (Process
IDentification number).
A PID megadja az elindított program sorszámát a
gép elindítása óta, s így egyedi az
adott gépen futó programokra (pl. a futó
shellünknek is van ilyen száma). A bejelentkezési
shellhez tartozó programokat a ps paranccsal
kérdezhetjük le. Ha más terminálon is
dolgozunk, akkor a
ps -u FelhasználóiNévEnter
paranccsal kérdezhetjük meg az adott
FelhasználóiNévhez tartozó összes
futó eljárást Ezt azt utasítást BSD
alapú gépeken ps -u formában kell helyesen kiadni..
Hasznos lehet még a
linux $ ps axuww | head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 620 256 ? S 21:47 0:03 init
root 2 0.0 0.0 0 0 ? SW 21:47 0:00 [keventd]
root 3 0.0 0.0 0 0 ? SWN 21:47 0:00 [ksoftirqd_CPU0]
root 4 0.0 0.0 0 0 ? SW 21:47 0:00 [kswapd]
root 5 0.0 0.0 0 0 ? SW 21:47 0:00 [bdflush]
root 6 0.0 0.0 0 0 ? SW 21:47 0:00 [kupdated]
root 7 0.0 0.0 0 0 ? SW 21:47 0:00 [kinoded]
vagy a
linux $ ps -elf | head
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S root 1 0 0 75 0 - 155 schedu 21:47 ? 00:00:03 init
0 S root 2 1 0 75 0 - 0 contex 21:47 ? 00:00:00 [keventd]
0 S root 3 1 0 94 19 - 0 ksofti 21:47 ? 00:00:00 [ksoftirqd_CPU0]
0 S root 4 1 0 85 0 - 0 kswapd 21:47 ? 00:00:00 [kswapd]
0 S root 5 1 0 85 0 - 0 bdflus 21:47 ? 00:00:00 [bdflush]
0 S root 6 1 0 75 0 - 0 schedu 21:47 ? 00:00:00 [kupdated]
0 S root 7 1 0 85 0 - 0 kinode 21:47 ? 00:00:00 [kinoded]
0 S root 11 1 0 75 0 - 0 ? 21:47 ? 00:00:00 [kjournald]
A felesleges programjainkat le is állíthatjuk a kill
parancs segítségével. A
kill -9 PID-szám Enter
parancs leállítja a PID-szám
azonosítójú eljárást. A
kill -9 %2 Enter
leállítja a 2. számú
háttéreljárást.
A -9 kapcsoló az ún. trap jel értéke.
/usr/include/bits/signum.h :
/* Signals. */
#define SIGHUP 1 /* Hangup (POSIX). */
#define SIGINT 2 /* Interrupt (ANSI). */
#define SIGQUIT 3 /* Quit (POSIX). */
#define SIGILL 4 /* Illegal instruction (ANSI). */
#define SIGTRAP 5 /* Trace trap (POSIX). */
#define SIGABRT 6 /* Abort (ANSI). */
#define SIGIOT 6 /* IOT trap (4.2 BSD). */
#define SIGBUS 7 /* BUS error (4.2 BSD). */
#define SIGFPE 8 /* Floating-point exception (ANSI). */
#define SIGKILL 9 /* Kill, unblockable (POSIX). */
#define SIGUSR1 10 /* User-defined signal 1 (POSIX). */
#define SIGSEGV 11 /* Segmentation violation (ANSI). */
#define SIGUSR2 12 /* User-defined signal 2 (POSIX). */
#define SIGPIPE 13 /* Broken pipe (POSIX). */
#define SIGALRM 14 /* Alarm clock (POSIX). */
#define SIGTERM 15 /* Termination (ANSI). */
#define SIGSTKFLT 16 /* Stack fault. */
#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */
#define SIGCHLD 17 /* Child status has changed (POSIX). */
....
Csak a saját programjainkat tudjuk leállítani.
A UNIX rendszer minden futó eljáráshoz egy
ún. prioritási értéket rendel:
minél kisebb ez a szám, annál nagyobb
százalékát kapja meg a CPU idõnek az adott
program.
Ha nagy és hosszú háttérben futó
programot akarunk elindítani, ajánlatos ezt nagyobb
prioritási értékkel (``lassabb
futással''
elindítani.
A csökkentett prioritás beállítása:
nice [-Szám] ParancsEnter
A Szám 1 és 19 közti érték, és
a növekvõ értékek csökkenõ
prioritásra utalnak. Az alapérték a 10.
A nice magától nem futtat a háttérben,
ezért általában a háttérben a
következõ típusú paranccsal futtathatunk:
nohup nice Program KimenetiFile Enter
A prioritást egy már futó programnál is
átállíthatjuk a renice parancs
segítségével:
renice Új-prioritás PID-szám Enter
ahol a PID-szám az átállítandó
program azonosítóját jelenti.
A bash shell
A UNIX rendszereken
többféle shell (burok) program
futtatható:
- legrégibb a Bourne (sh vagy bsh)
- C nyelv szintaxisát követõ C-shell (csh).
- Korn shell (ksh)
- bash - GNU Bourne-Again SHell
A bash shell maga egy
interaktív parancsértelmezõ
és programmozási nyelv, amely a következõ
funkciókat tartalmazza:
- shell parancsok
- függvények, feltételek és aritmetikai
kifejezések kiértékelése
- különleges parancsok
- job vezérlés
- parancs helyettesítés
- állománynév helyettesítés
- bemenet és kimenet átirányítása
- helyettesítõ nevek alkalmazása
- ~ (tilde) helyettesítés
- paraméter helyettesítés
- parancssor szerkesztése
Ha a bash shellt
bejelentkezéskor hívja meg a rendszer,
az végrehajtja a /etc/profile shell állomány
parancsait, majd sorban a ~/.bash_profile, ~/.bash_login, és
~/.profile állományok parancsait.
Kilépéskor
végrehajtja a ~/.bash_logout parancsait.
Ha a bash shell
nem-bejelentkezéskori interaktív
shellként fut, akkor megpróbálja a ~/.bashrc
állomány parancsait futtatni.
Amennyiben a bash parancs
után megadunk egy
állománynevet, akkor az adott állományban
felsorolt shell parancsok végrehajtódnak. A megadott
állománynak olvashatónak kell lenni (l. chmod
parancs).
A környezeti
változók
A
környezetváltozók tárolják az
egy-egy program számára átadható
információkat. A környezetváltozónak
van egy neve és ehhez rendelhetünk értéket.
Értéket egyszerûen a
Név=Érték
utasítással
adhatunk a változónak
(C-shellben ez set Név Érték alakú).. Ez az
értékadás csak az adott shellre
érvényes, ha azt akarjuk, hogy az abból
nyíló újabb shellek is átvegyék a
környezetváltozót, azt exportálni kell:
export Név
(A C-shellben a set helyett a
setenv paranccsal kell ilyenkor
értéket adni)
A leggyakrabban
használt környezetváltozók
közé tartozik a
- TERM, mely a terminálunkat azonosítja a rendszer
számára, a
- LOGNAME, mely bejelentkezési nevünket tartalmazza, a
- PWD, mely az aktuális könyvtár nevét
adja meg, a
- PATH pedig a parancsok keresési útvonalát
tartalmazza.
Interaktív
használatkor a shell a parancsokra a PS1
környezetváltozóban definiált prompttal
vár. A bash shell a PS1 értékét a prompt
kiírása elõtt mindig kiértékeli.
Így a
export PS1='$PWD >'
parancs hatására
a prompt mindig az aktuális
könyvtárnév lesz (a PS1 változó mindig
az aktuális PWD változó
értékét fogja tartalmazni).
Amennyiben a parancsot nem
fejeztük be az ``újsor''
karakter (Enter) kiadása elõtt (pl. a ' vagy "
nyitó karaktereknek nem adunk meg párt), akkor a bash
shell a PS2 környezetváltozó
értékét rakja ki másodlagos
promptként.
A parancsok
kiértékelése a shellben
Minden alkalommal, amikor
átadunk egy parancsot a rendszernek, a
shell kiértékeli, és feldolgozza azt.
Amennyiben a rendszer egy
speciális beépített
parancsát adjuk ki, az az adott shellben hajtódik
végre (például a test parancsra a shell
beépített utasítása hajtódik
végre, még akkor is, ha létezik általunk
létrehozott, test nevû futtatható
állomány).
A következõ
lépésben a shell
leellenõrzi, hogy a kiadott parancs nem egy általunk
megadott függvény-e. Amennyiben igen, a
pozícionális paraméterek
pozícionális paraméterek (azaz az adott parancs
parancssorban lévõ argumentumai) elmentõdnek, majd
behelyettesítõdnek a függvénybe.
Amikor a függvény
lefut, a shell visszatölti az
eredeti paramétereket.
Egy függvény
mindig az utoljára végrehajtott
parancs visszatérési
értékévelvisszatérési
értékével fejezi be a futását,
hacsak a return utasítással nem adunk neki más
értéket. A függvény az aktuális
shellben hajtódik végre.
Amennyiben a parancs
fordítás és linkelés
eredménye (pl. az a.out állomány), akkor az adott
shellben futtatja le.
Ha a utasítás se
nem linkelt ill. beépített
parancs, se nem függvény, akkor azt a shell parancsokat
tartalmazó állománynak tekinti, és alshellt
indít el azok beolvasására és
végrehajtására.
Ilyenkor a nem
exportált alias- és
függvénydefiniciók nem adódnak át. A
zárójelek közti parancsok is alshellben futnak le,
de megkapják a nem exportált változókat is.
A parancsot a rendszer a PATH
környezetváltozó
értékeként megadott könyvtárakban
keresi.
A PATH-ban több
könyvtárnevet is megadhatunk,
egymástól kettõsponttal elválasztva.
A parancs keresése a
megadott felsorolási sorrendben
történik.
PATH=/opt/lheasoft/i686-pc-linux-gnu/scripts:/opt/lheasoft/i686-pc-linux-gnu/bin:/home/zsolt/bin:/bin:/usr/bin:
/usr/X11R6/bin:/usr/local/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/java/jre/bin:
~/bin/linux:~/bin/linux:~/bin/linux:.
Amennyiben a parancs / jelet
tartalmaz, akkor a shell nem
használja a PATH értékét, hanem
megpróbálja útvonalként értelmezni a
parancsot.
A parancsot csak akkor
indítja el a shell, ha annak
védelmi kódja (amit a chmod paranccsal
állíthatunk be) lehetõvé teszi a
futtatást.
Védõkarakterek
Minden ún.
metakarakter, ezek a
- fordított törtvonal, (\)
- aposztróf ('),
- fordított aposztróf (`),
- macskaköröm ("),
- gömbölyû (()),
- szögletes ([]) és kapcsos ({})
zárójelek,
- kisebb és nagyobb jel (<>),
- függõleges vonal (|),
- és-jel (&),
- pontosvesszõ (;),
- csillag (*)
- kérdõjel (?)
- dollár ($)
speciális
jelentést hordoz a shell számára.
Amennyiben azt akarjuk, hogy a
shell ne értelmezzen egy
karaktert, akkor azt le kell védeni.
Egy karaktert az elé
helyezett fordított törtvonal
(\) védi meg a shell
kiértékelésétõl.
A sor végén
álló \ azt jelzi, hogy a
parancs a következõ sorban folytatódik.
Több karaktert
aposztrófok (') közé kell tenni
(ezzel az szövegben elõforduló aposztrófot
nem tudjuk levédeni).
A macskakörmök
közötti szövegrészben
végrehajtódik a paraméter- és
parancshelyettesítés, de a fordított
törtvonal levédi
a fordított
törtvonalat, a fordított
aposztrófot (), a macskakörmöt (") és a
dollár () jelet.
A macskakörmök
és aposztrófok közötti
részt a shell egy szónak kezeli (egy
pozíciós paramétert foglal).
A * és @
pozíciós paraméterek (az
összes átadott argumentum) egyforma hatású
amikor nem tesszük macskakörmök közé, de
macskakörmök között a * egy szóként
kezeli az összes átadott paramétert, míg a @
minden paramétert külön szóba ír.
A fordított
aposztrófok között a
fordított törtjel levédi a fordított
aposztrófot és a dollár jelet. Amennyiben a
fordított aposztróf macskakörmök
között fordul elõ, akkor a fordított
törtvonal levédi a fordított aposztrófok
közötti macskakörmöt is.
A fenntartott szavak valamint
a helyettesítõ nevek
(alias) felismerését megakadályozhatjuk,
amennyiben bármelyik karakterüket levédjük
(ezek felismerése még a védõkarakterek
kiértékelése elõtt történik). A
beépített parancsok, valamint a függvények
felismerését ilyen módon nem
akadályozhatjuk meg.
Parancssor szerkesztés
A bash shell az utolsó
végrehajtott parancsokatt a
HOME/.bash_history állományban tárolja el.
Az állomány neve
a HISTFILE
környezetváltozóval megváltoztatható,
az eltárolt parancsok számát meg a HISTSIZE
környezetváltozó értéke szabja meg.
Alapbeállításban
a begépelt parancsok a
bejelentkezések között is eltárolódnak,
és amennyiben egyszerre több bejelentkezésünk
is fut ugyanazon a gépen, akkor mindegyik ugyanabba az
állományba írja be a begépelt parancsokat,
ezért más bejelentkezésben beírt
parancsainkat is visszahívhatjuk.
Újkori cifraság,
hogy lehetség van a
szóközzel induló paracsokat kihagyni a
.bash_history-ból.
A parancsok
visszahívására az fc parancs
szolgál. Az FCEDIT környezetváltozó
értéke az a szövegszerkesztõ, melyet a
szerkesztéshez szeretnénk használni,
például a vi vagy az emacs.
A parancssor
szerkesztését az FCEDIT
definiálása nélkül, az EDITOR illetve ennek
hiányaban a VISUAL környezetváltozók
beállításával is megadhatjuk. Ha a
változó értéke emacs, gmacs, vagy vi-ra
végzõdik, akkor a megfelelõ
parancsszerkesztési mód lép
mûködésbe. Általában ezek egyike sincs
definiálva, errõl a felhasználónak kell
gondoskodnia (például a .profile állományon
keresztül).
Az EDITOR és VISUAL
környezetváltozók helyett
a
set -o vi
, ill. a
set -o emacs
parancsokkal is
beállíthatjuk a parancssorok
szerkesztését. Ezeket a parancsokat szintén
célszerû a .profile állományba
beleírni.
Visszatérési
értékek
Minden lefuttatott parancs egy
u.n. visszatérési
értéket ad vissza az õt elindító
shellnek (programnak).
Ha külön, a return
utasítással nem adunk neki
más értéket, akkor egy shell scriptben ezt
normális lefutás esetén az
utolsó lefuttatott
parancs visszatérési
értéke adja meg.
A futás közbeni
hibákat a shell kiírja a
hibát tartalmazó sor számával
(egynél több sor esetén), a hívott
függvény nevével és a hibaüzenettel
együtt.
A bash shell kapcsolói
A bash shell
lefuttatható programként is (akárcsak
a többi shell). A bash parancsnak megadhatók
kapcsolók is (melyeket a már futó shellben is
állíthatunk a set paranccsal).
A bash-shell
beépített parancsai
A bash shell a
következõ fenntartott szavakat ismeri fel,
amennyiben azok a parancs elsõ szavai,
védõkarakaterek nélkül:
if for case then
while esac else until function
elif do select fi
done time [[ ]]
for Azonosító [in
Érték ...]; do Lista
;done
Minden alkalommal, amikor a
for parancs lefut, az
Azonosító értéke az Érték
következõ szavát veszi fel. Ha nem adjuk meg az in
Érték kifejezést, akkor a Listában
felsorolt parancsokat a pozíciós paraméterekre
hajtja végre.
select Azonosító
[in Érték ...] ;do
Lista ;done
A select parancs kinyomtatja a
standard hibakimenetenstandard
hibakimenet az Értékben felsorolt szavakat,
sorszámmal ellátva. Ha nem adjuk meg az
Értéket, a pozíciós paramétereket
használja a shell. A PS3-ban definiált promptot
kiírva olvassa be a választ.
Amennyiben a beolvasott sor
tartalmaz egy számot, akkor az
Azonosító értéke a kiválasztott
szó lesz, üres sor esetén a választási
lista jelenik meg újra, egyébként pedig az
Azonosító nem kap értéket. A beolvasott
sort a REPLY környezetváltozó tartalmazza. Minden
kiválasztásra végrehajtódnak a
Listában felsorolt parancs(ok).
case Szó in [[ ( ] Minta[
Minta] ... ) Lista ;;] esac
A case parancs
végrehajtja a Szóval egyezõ
elsõ Mintához tartozó Listát. A Minta az
állománynév helyettesítésben
ismertetetett helyettesítõ karaktereket tartalmazhat.
if Lista ;then Lista [elif Lista
;then Lista] ... [;else Lista] ;fi
Az if parancs
végrehajtja az elsõ Listában
felsorolt parancsokat, és ha az utolsó nulla
visszatérési értéket ad, akkor az
utána következõ Listát hajtja végre.
Ellenkezõ esetben az
elif utáni részt
értékeli az elõzõhöz hasonlóan.
Amennyiben egy feltételnél sem nulla a
visszatérési érték az else utáni
Listát hajta végre.
while Lista ;do Lista ;done
until Lista ;do Lista ;done
A while parancs folyamatosan
végrehajtja az utána
felsorolt parancsokat, és amennyiben az utolsó parancs
visszatérési értéke nulla,
végrehajtja a do utáni parancssorozatot,
különben kilép a hurokból.programhurok
Az until parancs
hasonlóan mûködik, csak a
feltételnek nulla értékére lép ki a
hurokból.
( Lista )
A Lista parancs(sorozatot)
külön környezetben hajtja
végre, így a végrehajtás során
létrejött vátozások
(környezetváltozó módosítása,
könyvtárváltás) nem
befolyásolják a munkakörnyezetünket. Amennyiben
egymásba kell ágyazni több ilyen
hívást, tegyünk szóközt a
zárójelek közé, mivel az aritmetikai
kiértékelés használja a kettõs
zárójelet (a (( jelet).
Lista ;
Egyszerûen
végrehajtja a parancsokat. Mivel a kapcsos
zárójel fenntartott szó, ezért a shell csak
akkor ismeri fel, ha a sor elején vagy a parancsokat
elválasztó pontosvesszõ után áll.
[[ Kifejezés ]]
Kiértékeli a
Kifejezést, és nulla
értékkel tér vissza, ha az igaz.
function Azonosító
() {Lista} ;
az Azonosítóhoz
rendel egy függvényt. A
függvény a {} közötti Listában felsorolt
parancsokat hajtja végre.
time Parancssorozat
Végrehajtja a
Parancssorozatot és kiírja a
felhasznált rendszer- és felhasználói
idõt a standard hibakimeneten.
A függvények
A parancshoz hasonlóan
a függvényeknek is
átadhatunk pozicionális paramétereket.
A függvények a
hívó paranccsal egy
eljárásban (process) futnak le, és
megosztják annak erõforrásait
(könyvtár, állományok,
nyomkövetés,nyomkövetés változók
...).
A
függvénybõl a return speciális paranccsal
térhetünk vissza. A függvény
végrehajtása során fellépõ hiba is
felfüggeszti a függvény futását.
Feltételes
kifejezések
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 shell nem bontja fel
szavakra, és nem hajt végre
állománynév helyettesítést a [[
és ]] jelek között. Minden kifejezést a
következõ kifejezésekbõl
állíthatunk össze:
- [-a File] Igaz, ha a File létezik.
- [-d File] Igaz, ha a File létezik, és
könyvtár.
- [-f File] Igaz, ha a File létezik, és
közönséges állomány.
- [-n String] Igaz, ha a String nem nulla
hosszúságú.
- [-r File] Igaz, ha a File létezik, és
olvasható az eljárás számára.
- [-s File] Igaz, ha a File létezik, és nem nulla
hosszúságú.
- [-w File] Igaz, ha a File létezik, és az adott
eljárás tudja írni.
- [-x File] Igaz, ha a File létezik, és a futó
eljárás végre tudja hajtani. Ha a File
könyvtár, akkor a futó eljárásnak joga
van keresni a könyvtárban.
- [-z String] Igaz, ha a String nulla
hosszúságú.
- [-L File] Igaz, ha a File létezik, és szimbolikus
link.
- [File1 -nt File2] Igaz, ha File1 létezik és
újabb, mint File2.
- [File1 -ot File2] Igaz, ha File1 létezik és
régebbi, mint File2.
- [File1 -ef File2] Igaz, ha File1 és File2 is
létezik, és ugyanarra az állományra
mutatnak.
- [String = Minta] Igaz, ha a String egyezik a Mintával.
- [String != Minta] Igaz, ha a String nem egyezik a Mintával.
- [String1 < String2] Igaz, ha a String1 megelõzi az
ASCII alapú könyvtári sorrendben a String2
kifejezést.
- [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 -ne Kifejezés2] Igaz, ha a
Kifejezés1 nem egyenlõ Kifejezés2-vel.
- [Kifejezés1 -lt Kifejezés2] Igaz, ha a
Kifejezés1 kisebb, mint Kifejezés2.
- [Kifejezés1 -gt Kifejezés2] Igaz, ha
Kifejezés1 nagyobb, mint Kifejezés2.
- [Kifejezés1 -le Kifejezés2] Igaz, ha
Kifejezés1 kisebb vagy egyenlõ, mint Kifejezés2.
- [Kifejezés1 -ge Kifejezés2] Igaz, ha
Kifejezés1 nagyobb vagy egyenlõ, mint Kifejezés2.
Összetett
kifejezéseket ezekbõl a
következõképp gyárthatunk
(csökkenõ prioritással):
- [(Kifejezés)] Igaz, ha a Kifejezés igaz. A
kifejezések csoportosítására
használjuk.
- [!Kifejezés] Igaz, ha a Kifejezés hamis.
- [Kifejezés1 && Kifejezés2] Igaz, ha a
Kifejezés1 és a Kifejezés2 is igaz. Az &&
helyett a -a feltétel is használható.
- [Kifejezés1 || Kifejezés2] Igaz, ha vagy a
Kifejezés1 vagy a Kifejezés2 igaz.Az || helyett a -o
feltétel is használható.
Speciális parancsok
A legfontosabb
beépített parancsok:
. File
Beolvassa a File-t, majd
végrehajtja az aktuális shellben
és környezetben. A File-t a PATH
környezetváltozó alapján keresi meg. A
visszatérési érték az utolsó
végrehajtott parancs visszatérési
értéke. A . parancs beolvassa a teljes File-t
mielõtt végrehajtaná. Ezért a File-on
belüli alias, stb. parancsoknak már nem lesz hatása
a végrehajtás során. Ha interaktív
bejelentkezésbõlinteraktív
bejelentkezésbõl futtatunk így, akkor az
állományban található exit
utasítás hatására mindjárt a
shellbõl is kilépünk.
alias [-tx]
[Név[=Érték]] ...
Argumentum nélkül
az alias parancs kiírja a
helyettesítõnevek listáját
Név=Érték formátumban. Argumentumot megadva
beállítja a Név=Érték
formában megadott hozzárendelést.
Például az
alias dir=ls
hatására a dir
parancs is kiírja egy
könyvtár tartalmát.
Az x kapcsoló
hatására az utasítás
exportált (azaz az aleljárások
számára is elérhetõ) lesz, illetve
kiíráskor csak az exportált
helyettesítõ neveket írja ki.
A t kapcsoló
bekapcsolja a nyomkövetést az adott
Névre.
break [n]
Kilép a while, until,
for vagy select hurokból. Az
opcionális n paraméter mondja meg, hogy egymásba
ágyazott hurkok esetén hány szintet lépjen
feljebb.
continue [n]
A while, until, for vagy
select következõ ciklusát
kezdi el. Az opcionális n paraméter mondja meg, hogy
egymásba ágyazott hurkok esetén hány
szintet lépjen feljebb.
eval [Argumentum ...]
Beolvassa az Argumentumokat
shell inputként, és az
eredményként létrejövõ parancso(ka)t
végrehajtja. Ezzel az utasítással kétszer
történik meg az Argumentumban található
speciális karakterek kiértékelése.
exit [n]
A shell befejezi
futását és az n
értékkel tér vissza. Ha nem adunk meg
visszatérési értéket, akkor az az
utolsó végrehajtott parancs
értékével tér vissza.
export [Név[=
Érték]] ...
A megjelölt neveket
exportálja. Ezáltal az
így kijelölt változók automatikusan
átadódnak a shellbõl indított
aleljárásoknak is, még ha közben meg is
változtattuk értéküket.
getopts OpcióString
Név [Argumentum ...]
Lellenõrzi a shell
parancs Argumentumát
(pozíciós paramétereit) az opciók
szempontjából. Opció a + vagy a - jellel
kezdõdõ betû (vagy szó). Ha az argumentum
nem plusz vagy mínusz jellel kezdõdik, vagy a -- jel
fordul elõ, azon túl nem keres opciót.
Az OpcióString
tartalmazza azokat a betûket, amit a
getopts parancs opcióként felismer. Az adott betû
utáni kettõspont azt jelzi, hogy annak az opciónak
argumentuma van. Az opció argumentumát vagy
közvetlenül az opció után, vagy attól
szóközzel elválasztva kell megadni. A getopts
parancs a soron következõ opcióbetût a
Név változóba helyezi, amennyiben az opciót
a + (vagy -) jel elõzte meg. A következõ argumentum
pozícióját az OPTIND változó, az
adott opció argumentumát az OPTARG változó
tartalmazza.
let Kifejezés ...
Kiértékeli a
megadott atritmetikai kifejezést.
Nulla értékkel tér viszsza, ha az utolsó
kifejezés értéke nem nulla,
máskülönben eggyel.
print [-Rnprsu[n]] [Argumentum
...]
Kinyomtatja az argumentumokat
a standard kimenetre. A kapcsolók
jelentése a következõ: az R és r nem hajtja
végre az ún. escape szekvenciákescape
szekvenciák (++, stb.) kifejtését, az n nem
ír ki új sor karaktert a lista végére.
A p kapcsoló
csõbe ír, az s kapcsoló
hatására pedig az utasítás
beleíródik a HISTFILE állományba. Az u
kapcsoló segítségével az n számmal
megadott állományleíróba írhatunk.
pwd
Kiírja az
aktuális könyvtárat. Hatása
azonos a print -r - PWD paranccsal.
read [-prsu[n]]
[Név?Prompt] [Név ...]
Beolvas egy sort a standard
bemenetrõl és szavakra bontja
a mezõelválasztó karaktereket
definiáló IFS környezetváltozó
alapján. A sor elejére kiteszi a Promptot, és a
Név változóba olvassa a sort. Az r kapcsoló
hatására szavakat az egymás után felsorolt
Név változókba teszi, és a sorvégi
fordított törtjelet nem értelmezi folytatósor
jelzésre. Ha nem adunk meg nevet, a sort a REPLY
változóba olvassa be. A visszatérési
érték nulla, kivéve ha file vége jelet
olvas be.
A p kapcsoló
csõbõl olvas, az s kapcsoló
hatására a parancs beleíróddik a HISTFILE
állományba. Az u kapcsoló
segítségével az n számmal megadott
állományleíróból olvashatunk.
readonly [Név
[=Érték] ] ...
A megadott Nevet csak
olvashatónak jelöli meg, és
ezáltal a változó értékét nem
lehet késõbb megváltoztatni.
return [n]
A shell függvény
futását lezárja
és a hívó eljárásba adja vissza a
vezérlést n visszatérési
értékkel.
set [+-aefhkmnopstuvx] [+-o
Opció ]... [+-A Név ]
[Argumentum...]
A shell
különbözõ paramétereit
állítja. A következõ parancsokat
használhatjuk:
-a Minden
további
definiált változó automatikusan exportált
lesz.
-f Letiltja az állománynév
helyettesítést.
-n Beolvassa és leellenõrzi a parancsokat, de nem hajtja
õket végre.
-o Az utána megadható, leggyakrabban használt
opciók a következõk:
emacs: emacs
módban lehet a
parancssort szerkeszteni;
vi: a vi beszúrási üzemmódjában hajtja
végre a parancssor szerkesztését;
ignoreeof: a shell nem lép ki a file vége karakterre,
csak az exit parancsra;
markdirs: minden az állománynévkifejtés
eredményeként kapott könyvtárnév
végére egy törtvonalat illeszt;
noclobber: megakadályozza hogy a
átirányítás hatására
már létezõ állományokat
felülírjon a shell. Ilyenkor a jellel érthetünk
el felülírást;
nolog: megakadályozza, hogy a
függvénydefiniciókat a shell a history file-ba
mentse. Ha nem adunk meg opciókat, a beállított
opciókat írja ki.
-s A
pozíciós
paramétereket abc sorrendbe állítja.
-t Kilép egy parancs beolvasása és
végrehajtása után.
-u A helyettesítés során hibának
értelmezi, ha egy változó értéke
nincs beállítva.
-v Kiírja a végrehajtandó parancsot ahogy
beolvassa.
-x Kiírja a végrehajtandó parancsot
kifejtés után ahogy végrehajtja.
- Kikapcsolja az x és v kapcsolók hatását.
-- A kapcsolók feldolgozásának végét
jelzi. Az utána következõ argumentum már
kezdõdhet minusz jellel anélkül, hogy azt a shell
opciónak értelmezné.
Amennyiben a fenti kapcsolókat mínusz helyett plusz
jellel adjuk meg, akkor az kikapcsolja az adott kapcsoló
hatását. A kapcsolók aktuális
beállítását a -
környezetváltozó tartalmazza.
shift [n]
Átszámozza a
pozíciós paramétereket
n+1-tõl kezdve 1, 2 ...-re.
times
Kiírja a shell,
és a belõle indított
eljárások által felhasznált rendszer-
és felhasználói idõt.
trap [Parancs] [Jel] ...
Beolvassa és
végrehajtja a Parancsot ha a shell megkapja
a Jelet. A kiadható jeleket a kill -l paranccsal
listázhatjuk ki.
typeset [+HLRZfilrtux[n]] [
Név [=Érték]] ...
Beállítja
bash:type a shell változók
értékeit és típusát.
ulimit [-HSacdfmst] [Limit]
Beállítja, vagy
(ha nem adjuk meg a Limitet) megmutatja
az erõforrás erõforrás határokat.
-a
Kilistázza az összes
határértéket.
-c A core dump (futási hiba esetén a program
memóriaképe a core állományba
másolódik, és ezt a dbx paranccsal
megvizsgálhatjuk) maximális mérete 512 byte-os
egységekben.
-d Az adatmezõnek fenntartott hely maximális
mérete kbyte-okban.
-f Az aleljárások által kiírható
maximális állománynagyság 512 byte-os
blokkokban.
-m A felhasználható fizikai memória
nagysága kbyte-okban.
-s A stack területstack terület legnagyobb mérete
kbyte-okban.
-t Az eljárás által felhasználható
maximális rendszeridõ másodpercben.
umask [Mask]
Az újonnan
létrehozott állományok alap
védelmi beállítását
szabályozza.
unalias Név ...
Kiveszi a felsorolt Neveket az
alias listából.
unset [-f] Név ...
A felsorolt Nevekhez
tartozó értékeket és
jellemzõket
kitörli.
wait [Job]
Vár a megadott
eljárásra (Job), és
tudósít futásának
befejezésérõl. Ha nem adjuk meg az
eljárást, az összes aleljárásunk
végére vár. A megadott eljárás
visszatérési értékét adja vissza.
Aritmetikai Kifejezések
Egész
típusú számolásokat a let
speciális parancs segítségével hajthatunk
végre. A kiértékelés integer,
az aritmetikai
kifejezések a C nyelv szintaxisát,
prioritási sorrendjét és
csoportosítási szabályait követik.
A let parancson
kívül megengedett a dupla
zárójel (azaz a (( ... )) ) használata.
Parancs
eredményének helyettesítése
Egy parancs kimenetét
felhasználhatjuk egy másik
parancsban is.
Hagyományosan ezt a
fordított aposztrófokkal lehet
elérni, de a bash shellben használható még
a $( Parancs ) alak is.
Állománynév
helyettesítés
A parancs minden szavát
a shell leellenõrzi a * ? [ ,
karakterek szempontjából. Amennyiben ilyet talál,
akkor a szót mintának tekinti, és
behelyettesíti ABC sorrendben a mintának megfelelõ
állománynevekkel. Ha nem talál egy
állománynevet sem, akkor változatlanul hagyja a
szót.
Jelölje a MintaLista az
egy, vagy több || jellel
elválasztott mintát. Ekkor
?(MintaLista) Az adott
minták közül
bármelyikkel egyezik.
*(MintaLista) Az adott
minták egyszer sem, vagy
többször fordulnak elõ.
+(MintaLista) Az adott
minták egyszer vagy többször
fordulhatnak elõ.
@|(MintaLista) Csak az egyik
megadott mintával egyezik.
!(MintaLista) Egyik megadott
mintával sem egyezik.
A .-tal kezdõdõ
állományneveknél
expliciten ki kell tenni a pontot a minta elejére,
különben a shell nem helyettesíti be azokat.
Lehetõleg ne adjunk
olyan állomány és
könyvtárneveket, melyek csillagot, kérdõjelet
vagy szögletes zárójeleket tartalmaznak.
Ki- és bemenetek
átirányítása
A shell --- még
mielõtt végrehajtaná a
parancsokat --- lehetõséget biztosít, hogy azok
bemenetét és kimenetét
átirányítsuk. Az
átirányítási parancsokra is
végrehajtódik a shell helyettesítése, de
csak a kifejtett értékek adódnak át a
meghívott programnak.
< File
A File állományból veszi a standard bemenetet.
>File
A File állományba teszi a standard kimenetet. Amennyiben
az állomány létezik, felülírja,
ellenkezõ esetben létrehozza.
>|File
Ugyanaz, mint a , de a noclobber opció esetén is
felülírja a létezõ állományt.
>>File
A File állományba teszi a standard kimenetet úgy,
hogy létezõ állomány esetén annak
végéhez hozzáír.
<>File
A File állományt írás-olvasásra
nyitja meg
standard bemenetként.
<Szó
A shell a Szó elõfordulásáig vagy a file
vége jelig olvassa be a standard inputot. Az így
keletkezett szöveg lesz a standard bemenet. Amennyiben a
Szó bármely karaktere le van védve, akkor a
keletkezett szövegen nem történik shell
helyettesítés, különben paraméter
és parancssor helyettesítés zajlik le. Ha a
Szó elé a - karaktert helyezzük, akkor ez a
szövegbõl kivágja a sor eleji tabulátorokat.
<&Számjegy
A standard inputot a Számjegy
állományleíróból kapja.
>&Számjegy
A standard kimenetet a Számjegy
állományleíróba teszi.
A fenti jelek elõtti szám az adott számhoz
tartozó állományleíró
átirányítását jelöli.
A 2>&1 helyettesítés a 2-es
állományleírójú eszközt
(standard hibakimenet) az 1-be (standard kimenet)
irányítja.
Többszörös átirányítás
esetén ügyelni kell a sorrendre. A 1>File 2>&1
kifejezés az 1. állományleírót a
File-hoz rendeli, majd a 2. állományleírót
az 1.-höz, ami már a File, azaz mindent a File-ba
ír. Fordított sorrend esetén a hibakimenetet a
standard kimenetre, az eredeti standard kimenetet pedig a File-ba
írja.
Helyettesítõ
nevek (alias)
Minden parancs
elsõ szavát a shell
kicseréli, amennyiben azt helyettesítõ
névnek (alias) definiáltuk.
A helyettesítõ szöveg (amire a shell az alias-t
kicseréli) tartalmazhat bármely létezõ
shell scriptet, akár metakarakterekkel is.
Ha aleljárásokban is akarunk használni egy
helyettesítõ nevet, azt exportálni kell.
A tilde
helyettesítés
Az alias
helyettesítés után a
shell
megvizsgál minden szót, hogy nem ~ jellel
kezdõdik-e.
Az utána a / jelig következõ szót a shell
megnézi, hogy elõfordul-e a /etc/passwd
állományban felhasználói
névként. Ha igen, akkor az adott
felhasználó bejelentkezési
könyvtárát helyettesíti be a
szó helyére.
Amennyiben a ~ / jelet közvetlenül megelõzi, akkor a
HOME változó értékére
helyettesítõdik.
Paraméter helyettesítés
A paraméter egy azonosító, a *,
@, #, ?, -, $, !
karakterek valamelyike, illetve egy vagy több számjegy
lehet. A számjegyes paraméterek az ún.
pozicionális paraméterek, melyek egy shell
hívásakor a shellnek átadott argumentumokat
tartalmazzák a megadott sorrendben. A speciális
karakteres paraméterek a shell által használt
és általában beállított
paraméterek.
A paramétereknek általában
értékük és beállított
tulajdonságaik vannak.
A bash shell támogatja az egy
dimenziós tömbök
használatát. A tömb egy elemére annak
indexével (szögletes zárójelek közti
aritmetikai kifejezés) hivatkozunk. Értéket egy
tömbnek a set -A paranccsal adhatunk. A tömb indexe 0
és 512 közötti érték lehet. E
határok közt a shell automatikusan létre is hozza a
tömböt. Ha egy tömbre index nélkül
hivatkozunk, az a 0. elemét jelöli.
Egy paraméter értékét
megadhatjuk
még egyszerû hozzárendeléssel:
Név=Érték
formában is. Amennyiben -i
(egész)
típusúnak állítottuk be a Név
változót, akkor az Érték egy aritmetikai
kifejezés is lehet, amit a shell kiértékel. A
pozicionális paramétereknek a set speciális
paranccsal adhatunk értéket. Ha scriptet hívunk
meg, akkor a $ 0 a hívó parancs neve, $ 1}, $ 2}, ...
pedig az átadott argumentumok. A $* és a $@ az
összes átadott argumentumot jelenti.
A shell a következõ
helyettesítéseket hajta
végre:
${Paraméter} A shell beolvassa
az összes két kapcsos
zárójel közti karaktert egy szóként,
mégha kapcsos zárójeleket vagy metakaraktereket
tartalmaz is. Amennyiben definiálva van ilyen
változó, annak értékét
helyettesíti be. A kapcsos zárójeleket
elhagyhatjuk, ha nem kell a változó neve után
közvetlenül egy betût, számot, vagy
aláhúzás karaktert illeszteni, vagy ha a
paraméternek indexet adunk. Az egy számjegynél
nagyobb pozicionális paramétereket is kapcsos
zárójelbe
kell tenni.
${#Paraméter} A Paraméter
értékének
a hosszát helyettesíti be. A * illetve a @
Paraméter-nél a pozíciós paraméterek
számát adja meg.
${#Azonosító}[*] A tömbben
található
elemek száma.
${Paraméter:-Érték} Ha a
Paraméter
létezik, és nem nulla az értéke, akkor azt
helyettesíti be, különben az Értéket.
${Paraméter:=Érték} Ha a
Paraméter nem
létezik, vagy nulla az értéke, akkor az
Értékre állítja be, és ezután
helyettesíti be.
${Paraméter:?Érték} Ha a
Paraméter
létezik, és nem nulla az értéke, akkor azt
helyettesíti be, különben kiírja az
Értéket és kilép a shellbõl.
{${Paraméter:+Érték} Ha a
Paraméter
létezik, és nem nulla az értéke, akkor az
Értéket helyettesíti be, különben semmit
nem helyettesít be.
# A shellnek átadott
pozicionális paraméterek
száma.
- A shell hívásakor bekapcsolt
opciók.
? Az utoljára végrehajtott
parancs
visszatérési értéke. A legtöbb parancs
sikeres végrehajtáskor 0 értékkel
tér vissza.
$ A shell processz-száma (PID).
Leggyakoribb alkalmazása
egyedi állománynév generálása: pl. a
/tmp/temp.$$ a processz egyedi számával ellátott
állománynevet jelenti.
_ Az elõzõ parancs utolsó
argumentuma.
! A háttérben utoljára
elindított
eljárás processz-száma.
ERRNO A hibakóddal utoljára
visszatért
eljárás hibakódja.
LINENO A script állományon vagy
a függvényen
belüli, éppen végrehajtás alatt
álló sor száma.
OLDPWD A cd parancs által
beállított
elõzõ munkakönyvtár.
OPTARG A getopts parancs által
feldolgozott utolsó
opció argumentuma.
OPTIND A getopts parancs által
feldolgozott utolsó
opció indexe.
PPID A shell szülõeljárásának
processz
száma.
PWD Az aktuális munkakönyvtár.
RANDOM Minden híváskor egy 0 és
32767
közötti "véletlen számot" generál. A
kezdõértéke beállítható.
REPLY A select és a \ep{read
speciális parancsok
által beállított változó, mely a
választ tartalmazza.
SECONDS A shell meghívása óta
eltelt idõt
írja ki másodpercekben. Ha
kezdõértéket adunk neki, onnan számolja az
idõt.
A shell a következõ változókat
használja:
CDPATH A cd parancs keresési
útvonala.
COLUMNS A shell ennek a
változónak az
értékét használja a szerkesztési
módokban és a select parancs alkalmazásakor az
ablak szélességének
megállapításához.
EDITOR Ha ennek értéke
emacs,gmacs, vagy vi-ra
végzõdik, és a VISUAL változó nincs
beállítva, akkor a megfelelõ
parancsszerkesztési mód lép
mûködésbe.
ENV Új shell meghívása elõtt e
változó a paraméterhelyettesítéssel
kapott állománynevet futtatja le. Általában
helyettesítõ nevek és függvények
definiálására használják.
FCEDIT Az fc parancs alatt
használandó
szövegszerkesztõt definiálja.
IFS A shell szóbetördelésére
használt
elválasztókaraktereket tartalmazza (szóköz,
tabulátor, új sor).
HISTFILE A végrehajtott
parancsokat tároló
állomány neve.
HISTSIZE Értéke adja meg, hogy
az utolsó
végrehajtott parancsok közül hányat
tárol el a shell.
HOME A cd parancs argumentum
nélkül ebbe a
könyvtárba ugrik. A bejelentkezési
eljárás a bejelentkezési könyvtárra
állítja az értékét. Ha több
gépen dolgozunk, célszerû programjainkat úgy
megírni, hogy ne a teljes file-nevekkel, hanem ennek a
változónak az értékével hivatkozzunk
az állományokra, mivel ezáltal programjaink
áttehetõk egyik géprõl a másikra.
LINES A select használja a
rendelkezésre
álló sorok meghatározására. A select
a listát a LINES értékének
kétharmadáig írja ki.
MAIL Az új leveleket tartalmazó
állomány
neve. Ha a MAILPATH változó nincs
beállítva, akkor a shell az állomány
megváltozását új levél
érkezéseként jelzi.
MAILCHECK Értéke meghatározza,
hogy a shell milyen
gyakran ellenõrizze le a MAILPATH vagyMAIL
változókban megadott állományokat.
Alapértéke 600 másodperc.
MAILPATH A benne felsorolt,
kettõsponttal elválasztott
állományneveket ellenõrzi a shell új
levél érkezése céljából.
Minden állománynév után
közvetlenül a kérdõjel után megadhatjuk
az üzenetet, amit a shell kiír, ha változás
történt az állományban. Az üzenetben a
shell elvégzi a paraméter helyettesítést. A
megváltozott állomány nevét a $_
változóban tárolja. Az üzenet
alapbeállítása: YOU HAVE MAIL IN $_.
PATH A parancsok keresési
útvonala.
Egymástól kettõsponttal elválasztott
könyvtárneveket tartalmaz, melyeknek megadási
sorrendjében keresi a shell a kiadott parancsnak
megfelelõ állománynevet. A nulla
könyvtárnév az aktuális
könyvtárat jelöli.
PS1 Az elsõdleges rendszer
promptot tartalmazza.
Értéke a
prompt kiiratása elõtt átmegy a
paraméter
helyettesítésen. Ha
felkiáltójelet adunk meg benne,
az a parancs
sorszámára
helyettesítõdik. Alapértéke a
dollár
és egy szóköz.
PS2 A másodlagos rendszer
prompt. Alapértéke a
nagyobbjel és egy szóköz.
PS3 A select parancsban a prompt
értéke.
Alapértéke a #? és egy szóköz.
SHELL A shell elérési útvonala.
(Sok program ezt
használja, ha ki akarunk lépni belõle a shellbe).
TMOUT Ha a PS1 prompt kiadása
után aTMOUT-ban megadott
számú percig nem adunk ki parancsot, a shell befejezi
futását. Akkor célszerû használni, ha
el szoktuk felejteni a kijelentkezést. 0 értéke
esetén nem lép ki a shell.
VISUAL Ha ennek értéke
emacs,gmacs, vagy vi-ra
végzõdik, akkor a megfelelõ
parancsszerkesztési mód lép
mûködésbe.
A környezeti változók
beállítására következzen egy
mintaként használható .profile
állomány:
umask 22
export PATH=$PATH:/u/local:/usr/local/bin:/usr/bin/X11:.
PS1='$LOGNAME'@hostname' $ '
VISUAL=vi
FCEDIT=vi
export TERM=vt100
export VISUAL FCEDIT
export PS1
if [ -z "$DISPLAY" ]
then
export DISPLAY=`who am i | awk '{l=length($6);
print substr($6,2,l-2)":0.0"}'`
else
if [ "$DISPLAY" = ":0.0" ]
then
export DISPLAY=":0.0"
else
export DISPLAY=`who am i || awk
'{l=length($6); print substr($6,2,l-2)":0.0"}'`
fi
fi
alias ls='ls -gF '
Az állományban elõször
beállítjuk az ún. umask
értékét (azaz a 755-ös alap védelmi
kódot), majd a PATH, PS1, VISUAL, FCEDIT és TERM
környezeti változókat (figyeljük meg, hogy a
PS1 értéke egy shell parancsot is tartalmaz!)
Ezután egy dupla if feltételvizsgálattal
megállapítjuk, hogy honnan jelentkeztünk be (helyi
géprõl vagy a hálózaton keresztül),
és ennek megfelelõen beállítjuk az X11
Window által használt DISPLAY változó
értékét (ez adja meg az X11 ablakokat
megjelenítõ grafikus terminál nevét). Az
állományt néhány alias
definícióval zárjuk: az ls parancs a csoportot is
fel fogja tüntetni a hosszabb file listákban.
Nézzük a következõ
parancsállományt, amely helyi
hirdetõtáblaként mûködtethetõ:
#!/bin/ bash
PS3="Válasszon> "
select ans in "exit" `ls -d /u/local/info/*/* \
| sed "s//u/local/info/\(.*\)\.news/\1/"`
do
if [[ $ans = exit ]]
then
exit
fi
more /u/local/info/$ans.news
echo "Nyomjon ENTER-t a folytatáshoz ... "
done
Az állomány elsõ sorában a #!
megjegyzés után következik a parancsot
futtató shell neve. Esetünkben --- tekintve, hogy a {select
parancs nincs a Bourne-shellben --- ez a Korn-shell. A második
sorban beállítjuk a select parancs által
használt PS3 prompt értékét. A
hirdetõtábla a /u/local/info könyvtár
alkönyvtáraiban elhelyezkedõ .info
végzõdésû állományokból
áll: egy-egy tétel címe megegyezik az
állomány nevével. A select parancs
argumentumában az automatikusan felépítik a
pillanatnyi listát (figyeljük meg a folytatósorok
használatát a sorvégi \ karakterrel),
amibõl aztán a felhasználó a
kívánt sorszám beütésével
választhat. Az ans változó a kiválasztott
tétellel tér vissza, amit aztán a do ciklusban
elhelyezkedõ more utasítás jelenít meg. A
ciklus az ans változó exit értékéig
ismétlõdik.
A for ciklus használatára példa a
következõ parancsállomány:
#!/bin/bash
for File in ls *.c
do
cp -i $File $File.old
echo $File
done
A parancssorozat az adott könyvtárban
található minden .c végzõdésû
állományból másolatot készít,
aminek neve az eredeti név .old-dal kiegészítve.
Állomány
megkeresése a könyvtárstruktúrában
Állományokat a find parancs
segítségével kereshetün meg a
könyvtárrendszerben. Például a
find . -name test.c -print
parancs az aktuális
könyvtártól lefelé
megkeresi az összes test.c állományt, és a
nevüket kiírja a képernyõre.
Ha nem tudjuk a teljes nevet,
csak azt hogy c-re
végzõdik, akkor a
find . -name '*c' -print
parancsot használva a find az
aktuális
könyvtártól lefelé megkeresi az összes c
végzõdésû állományt, és
a nevüket kiírja a képernyõre.
A parancs általánosabb alakja:
find KiindulásiKönyvtárak
-name
Állomány -exec Parancs
a KiindulásiKönyvtárakból
elindulva a
könyvtárstruktúrában lefelé keresi a
megadott nevû Állományt és
végrehajtja rá a megadott Parancsot. A find
sokoldalú parancs, részletes
leírását pl. a man find utasítással
kérhetjük elõ.
Példák mentésre:
--------------------------------------------
teljes:
--------------------------------------------
export DATUM=linux1.teljes.`date "+%y%m%d"`
ssh -1 backup@nagylinux "mkdir $DATUM"
cd /home/projects
touch teljes_mentes
for dir in `ls -1 `
do
tar -zcvf - $dir | ssh -1 backup@nagylinux "cd $DATUM;
split --bytes=690m - $dir.tgz."
done
export DATUM=linux1.teljes.`date "+%y%m%d"`/users
ssh -1 backup@nagylinux "mkdir -p $DATUM"
cd /home
for dir in `ls -1 | sed '/projects/d'`
do
tar -zcvf - $dir | ssh -1 backup@nagylinux "cd $DATUM;
split --bytes=690m - $dir.tgz."
done
--------------------------------------------
heti:
--------------------------------------------
cd /home
touch uj_heti_mentes
export MENTES='Heti/linux1.w'.`date "+%y%m%d"`.tgz
echo $MENTES
find . -newer regi_heti_mentes -type f -print
>/tmp/uj_heti_menteslista
tar -zcvf - -T /tmp/uj_heti_menteslista | ssh -1 backup@nagylinux "cat
>$MENTES"
mv uj_heti_mentes regi_heti_mentes
--------------------------------------------
napi:
--------------------------------------------
cd /home
touch uj_napi_mentes
export MENTES='Napi/linux1.d'.`date "+%y%m%d"`.tgz
echo $MENTES
find . -newer regi_napi_mentes -type f -print
>/tmp/uj_napi_menteslista
tar -zcvf - -T /tmp/uj_napi_menteslista | ssh -1 backup@nagylinux "cat
>$MENTES"
mv uj_napi_mentes regi_napi_mentes
torles:
find Napi -type f ! -newer `ls -dt Heti/* | head -1 ` -exec
rm {} \;
Állományok feldolgozása
A UNIX operációs rendszerben sok parancs az
állományok feldolgozását:
kifejezések megkeresését, gyors
szerkesztését (pipe-ot használva),
rendezését, ismétlõdések
kiszûrését teszi lehetõvé. A
továbbiakban ezeknek a parancsoknak a részletes
ismertetésével foglalkozunk.
A UNIX operációs rendszerben a grep parancs
szolgál arra, hogy állományokban megadott
karaktersorozatokat keressünk. A sed parancs a kimenet
szûrõszintû
szerkesztéséreszûrõszintû
szerkesztésére ex-- ill. vi--szerû
utasításokkal ad lehetõséget.
A UNIX általános célú
állomány feldolgozó programja az awk, amely
megadott mintájú sorokon utasításokat hajt
végre.
Az állományok bizonyos szempont szerinti sorrendbe
tételére a sort parancs szolgál.
A grep parancs ismertetése
A grep szolgál arra a UNIX operációs rendszerben,
hogy állományokban megadott karaktersorozatokat
keressünk. A grep családjába tartozik még az
egrep és a fgrep parancs is. A karaktersorozat tartalmazhat
általános helyettesítõ karaktereket is (l.
ed, vi, sed parancsok). A parancsnak a kapcsolókon
kívül két argumentuma van: az elsõ a keresett
minta, a második a állományok listája,
amiben keressük. Az utóbbi hiányában a
standard bemenetrõl olvassa be az állományt
(szûrõként is alkalmazhatjuk). Ha csak egy
állományt adunk meg, akkor csak a mintát
tartalmazó sorokat írja ki, különben
eléjük rakja annak az állománynak
nevét is, amiben a keresett minta elõfordul.
A keresendõ minta megadásánál
vigyázni kell arra, hogy a shell által speciálisan
kezelt karaktereket (', *, [, \, ", (, ),) levédjük. Ha a
minta nem egy összefüggõ karaktersorozat, akkor azt
aposztrófok (vagy macskakörmök) közé kell
tenni. A fõbb helyettesítõ karakterek a $, mely a
sor végét, a ^, mely a sor elejét, a ., mely egy
tetszõleges karaktert, a *, mely az utolsónak megadott
karakter tetszõleges számú
megjelenését jelöli és a [] pár, mely
azt határozza meg, hogy a karakternek a zárójelek
közti értékek valamelyikét kell felvennie.
Itt megengedett pl. az [a-z] használatával egy
egész tartomány kijelölése is. A
zárójelben egy kifejezés elõtti azt jelzi,
hogy azt az értéket nem veheti fel a
helyettesítendõ karakter. A -e kapcsoló
használatával lehetõség van több minta
megadására is.
A grep parancs használatakor a következõ
korlátozásokat célszeru
szem elõtt tartani: a sorok maximálisan 2048 karakter
hosszúak
lehetnek, a hosszabb sorokat a grep betördeli. A paragrafusok (l.
-p kapcsoló) maximális hossza 5000 karakter.
A bemenõ állomány nem tartalmazhat NULL karaktert,
és új sor
karakterre kell végzõdnie.
A grep kapcsolói:
-c Azt írja ki, hogy hány
sort talált, mely tartalmazta a mintát.
-E Kiterjesztett reguláris kifejezésként
értelmezi mindegyik mintát Ha a kapcsoló egy adott
rendszerben nem létezik, akkor a grep helyett az egrep parancsot
használva ugyanezt a funkciót megkapjuk.. A semmi minta
(NULL) minden sorral egyezik.
-e Minta Egy vagy több keresendõ mintát lehet
megadni. Igen hasznos, ha a Minta a - (mínusz) jellel
kezdõdik. A mintákat egymástól újsor
karakterrelújsor karakter kell elválasztani. A
mintákat a grep a -E és -F kapcsolók
hiányában egyszerû reguláris
kifejezés értelmezi. Több megadott minta
esetén minden olyan sort kiír, amelyik legalább az
egyik mintát tartalmazza. A -e kapcsoló el is
hagyható, de ilyenkor a Mintának a grep parancs
elsõ argumentumának kell lennie. A kapcsoló
többször is kiadható, és ekkor a
mintákat nem kell az újsor karakterrel
elválasztani.
-F Mindegyik megadott mintát szó szerint, és nem
reguláris kifejezésként értelmezi,
ezért sokkal gyorsabban lefut. Ha a kapcsoló egy adott
rendszerben nem létezik, akkor a grep helyett az fgrep parancsot
használva ugyanezt a funkciót megkapjuk..
-f Állomány
Megadja a keresési mintákat tartalmazó
állomány nevét. Az
Állományban minden mintának új sorban kell
állnia.
-h Hatására több állomány
esetén sem írja ki az állományneveket.
-i Az összehasonlítás során nem tesz
különbséget a kis- és nagybetuk
között.
-l Csak azon állományok nevét sorolja fel,
amelyekben a megadott kifejezés megtalálhato.
-n Minden sor elé kiírja, hogy az állomány
hányadik sorában található a megadott minta.
-p[Elválasztókarakter] A mintát tartalmazó
teljes paragrafust kiírja. A paragrafusokat
egymástól az üres sorok választják el.
Amennyiben megadjuk az Elválasztókaraktert, a grep annak
megfelelõen értelmezi a paragrafust.
-q Nem ír ki semmit a kimenetre, pusztán nulla
visszatérési értéket ad, ha a megadott
minta létezik.
-s Nem írja ki a nem létezõ, vagy nem
olvasható állományokra vonatkozo
hibaüzeneteket.
-v A megadott mintát nem tartalmazó sorokat írja
ki.
-w Egész szavakat keres.
-x Azokat a sorokat írja ki, melyeknél a megadott minta a
teljes sorral egyezik.
Példák:
A proba állományban keressük meg azokat a sorokat,
melyek betûvel
kezdõdnek:
grep '^[a-zA-Z]' proba Enter
A mintában szereplõ (sor eleje) jel mögötti
kifejezés kiválaszt minden betût, mely ABC
sorrendben a és z illetve A és Z közé esik --
azaz minden kis és nagy betût.
A proba állományból írjunk ki minden olyan
sort, mely vagy
az abc vagy a xyz karaktereket
tartalmazza:
grep -e 'abc' -e 'xyz' proba Enter
vagy
grep 'abc Enter
> xyz' proba Enter
vagy
grep -E 'abc|xyz' proba Enter
Ez utóbbi esetben kiterjesztett reguláris
kifejezést használtunk, melyben a | jel grep VAGY
mûveletet jelent.
A sed pipe szerkesztõ
A sed (streamline editor) egy csö szûrõszintû
szerkesztésére szolgál.
A szerkesztés során lehetõség van
kiválasztani azokat a sorokat, melyekre a szerkesztést el
akarjuk végezni, és csak azokat módosítani.
A sed nagyon hasonlít az ed szerkesztõ családra
(l. vi), és ennek megfelelõen a parancsok
általános alakjában meg lehet adni a
tartományt (sorok), melyekre a parancs vonatkozik, egy
parancsot, illetve az azt módosító
kapcsolókat.
A sed beolvassa a megadott állományokból (standard
bementrõl) a sorokat a minta munkaterületre,
végrehajtja azon a megadott parancsokat sorjában,
és végül kiírja a standard kimenetre. Ezek
után letörli a minta munkaterületet,minta
munkaterület és ugyanezt elvégzi a
következõ sorral. Néhány parancs egy
másik munkaterületre (tároló) el tudja
menteni a minta munkaterületet vagy annak egy
részét, hogy a késõbbiekben azt újra
felhasználhassa.
Ha a sed parancs nem tartalmaz címtartományt, akkor
minden sorra vonatkozik, különben csak a kijelölt
sorokra. A cím lehet a sor száma, a jel (a bemenet
utolsó sorát jelöli), vagy egy reguláris
kifejezés, mely kijelöli azt a sort, amellyel a
mintája illeszkedik. A szokásos reguláris
kifejezésektõlreguláris kifejezések (l. vi)
a sed megenged néhány eltérést.
A pont minden karaktert helyettesít, még a nem
sorvégi újsor karaktert is, eltérõen az ed
(vi) szerkesztõtõl.
A cím állhat nulla, egy vagy két
címbõl. Ha nincs megadva cím, a parancs minden
sorra vonatkozik. Amennyiben egy szám (illetve a jel), vagy egy
reguláris kifejezés van megadva, az utána
jövõ parancs a megadott számú sorra, illetve
a reguláris kifejezéssel megegyezõ sorra
vonatkozik. Ha két számot adunk meg vesszõvel
elválasztva, akkor a két sorszám között
minden sorra vonatkozik a parancs. Amennyiben a második
szám kisebb vagy egyenlõ az elsõnél, akkor
csak az elsõ számmal megegyezo sorszámú
soron végzi el a parancsot.
A sed a megadott parancsokat vagy a standard bementrõl veszi
(elso argumentum, vagy -e kapcsoló), vagy egy
állományból (-f kapcsoló). Egyszerre
összesen 99 parancsot lehet megadni.
A sed kapcsolói a következõk:
-e Utasítás A megadott
Utasítás alapján dolgozza fel a szöveget.
Amennyiben nem használjuk a -f kapcsolót, és csak
egy utasítást adunk meg, nem kell kitenni a
kapcsolót.
-f Állomány Az utasításokat
tartalmazó Állomány nevét adja meg.
-n Nem írja ki a standard kimenetre a szerkesztés
eredményét (csak az Utasításban
szereplõ külön parancs esetén). Ezzel lehet
elérni, hogy a sed ne írjon ki olyan sorokat, melyeket
nem szerkesztünk.
A sed parancsai
A sed parancsok sokszor valamilyen szöveget tartalmaznak. Az a+,
c+ vagy i+ parancsok
esetén egy sornál hosszabb szöveget is
beírhatunk, ha az utolsó sor kivételével
mindegyik egy fordított törtjelre végzõdik.
Mivel a parancsállományban a sed figyelmen
kívül hagyja a sor elején álló
szóköz és tabulátor karaktereket, azokat a
megadott szövegben a fordított törtjellel kell
levédeni.
A parancsok elõtt zárójelben szerepel, hogy
hány címet fogad el az adott parancs:
(1) a Szöveg A
következõ sor beolvasása elõtt a
Szöveget kiírja a kimenetre. Az a parancs után
fordított törtjelet kell tenni, és a Szöveget
új sorba írni.
(2)b[Cimke] A :Cimkével kezdõdõ sorra ugrik a
parancsállományban. Ha nem adunk meg Cimkét, a
parancsállomány végére ugrik.
(2)c Szöveg Letörli a minta munkaterületet, és
kiírja a Szöveget a kimenetre. Címtartomány
megadása esetén csak a tartomány
végén írja ki a Szöveget. Az a parancshoz
hasonlóan itt is a c parancs után fordított
törtjelet kell tenni, és a Szöveget új sorba
írni.
(2)d Letörli a minta munkaterületet.
(2)D A minta munkaterületminta munkaterület
elejérõl az elsõ új sor karakterig
töröl.
(2)g A minta munkaterületet letörli, és a
tároló munkaterületettároló
munkaterületet tölti át.
(2)G A tároló munkaterület tartalmát a minta
munkaterület végére illeszti.
(2)h A tároló munkaterületre bemásolja a
minta munkaterület tartalmát.
(2)H A minta munkaterület tartalmát a tároló
munkaterület végére illeszti.
(1)i Szöveg A Szöveget a kimenetre teszi, mielõtt a
minta munkaterület tartalmát kiírná. Az a
parancshoz hasonlóan itt is az i parancs után
fordított törtjelet kell tenni, és a Szöveget
új sorba írni.
(2)l A minta munkaterületet kiírja a standard kimentre
úgy, hogy a nem nyomtatható karaktereket 4
számjegyû hexadecimális formában írja
ki. A hosszú sorokat betördeli (folytatósor
esetén az elõzo sor végére egy
fordított törtjelet tesz). Igen hasznos, ha olyan
állományunk van, melyben hosszú
(például 2048 karakternél hosszabb) sorok vannak,
mivel azokat nem minden szövegszerkesztõ képes
kezelni.
(2)n A minta munkaterületet a standard kimenetre írja,
és annak helyére beolvassa a következõ sort.
(2)N A feldolgozandó állomány
következõ sorát a minta munkaterülethez
fûzi egy újsor karakterrel elválasztva, és
megváltoztatja az aktuális sorszámot. Olyan
minták keresésekor célszerû alkalmazni,
melyek két (vagy több) egymás utáni sorban
lehetnek.
(2)p A minta munkaterületet a standard kimenetre írja.
(2)P A minta munkaterület elejét az elsõ
újsor karakterig a standard kimenetre írja.
(1)q A parancsállomány végére ugrik, de nem
indít el új ciklust, hanem kilép.
(2)r Állomány Beolvassa az Állomány
tartalmát, és a standard kimenetre teszi a
következõ sor beolvasása elõtt. Az
Állománynak a parancssor végén kell
állnia, és pontosan egy elválasztó karakter
(szóköz vagy tabulátor) lehet elõtte.
(2)s/Minta/Helyettesítés/Kapcsolók A
munkaterületen levõ, a megadott Mintával
egyezõ karaktersorozatot a Helyettesítés
karaktersorozatra írja át. Ha nem adjuk meg a g
kapcsolót, csak az elsõ elõforduló
legnagyobb mintát cseréli le. A
helyettesítés szintaxisa megegyezik az ed és vi
szerkesztõknél leírtakkal. A következõ
kapcsolókat adhatjuk meg (egyszerre többet is):
[g] Az összes elõforduló, a megadott mintának
megfelelõ karaktersorozatot lecseréli.
[n] Csak a mintának megfelelõ n. karaktersorozatot
cseréli le.
[p] Kiírja a minta munkaterületet, ha sor került a
helyettesítésre.
w Állomány A minta munkaterületet az
Állományba írja, ha sor került a
helyettesítésre. A munkaterületet az
Állomány végéhez fûzi hozzá
(vagy ha az nem létezik, akkor létrehozza).
(2)tCimke A :Cimke sorra ugrik a parancsállományban,
amennyiben a helyettesítõ parancs hatására
változtatás történt a munkaterületen. Ha
nem adunk meg Cimkét,cimke a
parancsállományparancsállomány
végére ugrik.
(2)w Állomány A munkaterületet az
Állomány végére fûzi. Az
Állomány a parancssor végén kell, hogy
álljon, és pontosan egy elválasztókarakter
elõzi meg.
(2)x Kicseréli a minta és a tároló
munkaterület tartalmát.
(2)y/Minta1/Minta2/ A Minta1-ben felsorolt karaktereket
lecseréli a Minta2-ben felsoroltakkal. A két
mintában a karakterek számának meg kell egyezni.
(2)!sed-parancs A megadott sed parancsot azokra a sorokra alkalmazza,
melyeket a címkiválasztás nem jelölt ki.
(0):Cimke A b és t parancsok számára egy
cimkét ad meg a parancsállományban. A Cimke
legfeljebb 8 karakterbõl állhat.
(1)= Kiírja az aktuális sor számát a
standard kimentre.
Példák:
Teljes csere végrehajtása: átírunk minden
alma stringet eper-re a BemenoAllomany állományban. A
kimenetet az UjAllomanyba írjuk:
sed "s/alma/eper/g" BemenoAllomany UjAllomany
A pr parancs által elõállított lap
sorszámokat zárójelbe szeretnénk tenni,
és úgy kinyomtatni a BemenoAllomanyt:
pr BemenoAllomany sed "s/Page.*\([0-9]*\)/(\1)/" lpr
Ez az utasítás a Page szót tartalmazó,
és számra végzõdõ sorokat
cseréli le, úgy hogy a számot írja csak ki
zárójelben (az \1 jelöli az elsõ, \( - \)
párral kijelölt résszel egyezõ mintát).
Ha csak a keresem szót tartalmazó sorokat
szeretnénk megjeleníteni a BemenoAllomanyban, akkor a
sed -n "/keresem/p" BemenoAllomany
A -n kapcsoló miatt nem íródik ki semmi olyan a
kimenetre, amire nem szólítottuk fel a sedet. Jelen
esetben ez a p parancs (az utasítás helyett a grep
parancsot is használhattuk volna).
Állományok sorrendbe rendezése: a sort
utasítás
A sort állományok bizonyos szempont szerinti sorrendbe
tételére, illetve a már rendezett
állományok helyes sorrendben való
összefûzésére szolgál.
A parancs az argumentumában megadott állománynevet
(ennek hiányában a standard inputot) rendezi, és
az eredményt a standard kimenetre írja (kivéve ha
a -o kapcsolóval megadjuk a kimeneti állomány
nevét). Több bemeneti állománynevet is
megadhatunk, ilyenkor a sort parancs összefûzi õket,
és az így kapott állományra végzi el
a rendezést. Az alapértelmezésbeli rendezés
az (angol) ABC sorrend szerint történik, ill. LANG szerint.
A rendezés mezõk és oszlopokmezõk és
oszlopok kijelölésével történhet. A
mezõ az elválasztókarakterek (ez
általában a szóköz és a
tabulátor) közötti karaktersorozat. Az
elválasztókaraktert a -t kapcsolóval adhatjuk meg.
Az oszlop a mezõn belüli karakterpozicíó. A
mezo és/vagy az oszlop számát rendezési
kulcsnak hívjuk.
A sort parancs a rendezést a megadott kulcsok
sorrendjében végzi, azaz elõször az
elsõ kulcs szerint rendez, és a kulcson belül
megegyezõ sorokat a második megadott kulcs alapján
rendezi tovább (stb.).
-A Az ASCII szekvencia szerint
végzi el a rendezést (az alapértelemzést a
helyi nyelvre is át lehet állítani).
-b Figyelmen kívül hagyja a sor elején
álló szóközöket vagy
tabulátorokat az oszlopok
kiszámolásánál.
-c Lellenõrzi, hogy a megadott állomány a megadott
szabályok szerint sorba van-e rendezve. Ha igen, nulla
értékkel tér vissza.
-d ABC sorrend szerint végzi a rendezést. Csak a
betûk, számok és a szóközök
számítanak.
-f Rendezés elõtt az összes kisbetût nagyra
cseréli.
-i Figyelmen kívül hagyja az összes nem
nyomtatható karaktert az összehasonlítás
során.
-kKulcsDefiníció Egy keresési kulcsot
definiál, a következo formátumban:
[KezdõMezõ][.KezdõOszlop][Módosító][,[VégMezõ][.VégOszlop][Módosító]]
A szögletes zárójelek azt jelzik, hogy nem
kötelezõ megadni a bennük levõ számokat.
A rendezés a KezdõMezo KezdõOszlopa és a
VégMezõ Végoszlopa közötti karakterek
szerint történik. A Módosító a
b,d,f,i,n és r értékek valamelyike lehet.
Hatásuk megfelel az azonos betûvel jelölt
kapcsolókénak. A fenti mennyiségek
alapértékei: a KezdõMezõ a sor eleje, a
KezdõOszlop az elsõ oszlop a mezõben, a
VégMezõ az utolsó mezõ, és a
VégOszlop a mezõ utolso oszlopa. A
-k 3.2,3r
kapcsoló olyan rendezést jelent, melyben a 3. mezõ
2. pozíciójától a 3. mezõ
végéig (nincs kitéve a VégOszlop) folyik a
rendezés, fordított sorrendben (l. -r kapcsoló). A
fenti definíció megadható a -k kapcsoló
használata nélkül is, ha pl. a
KezdõMezõ elé plusz, a VégMezõ
elé mínusz jelet írunk. Ilyenkor a +
kapcsoló jelzi az átugrandó mezõk
számát, míg a - kapcsolóval adjuk meg azt a
legutolsó mezõt, amelyik még számít.
Az elõzõ példa ezzel a módszerrel
ezért ilyen:
+2.1 -3r
-m Több, már rendezett állományt fûz
össze egy rendezett állományba.
-n A számokat tartalmazó mezõket a
számértékük szerint rendezi. Mivel az ASCII
sorrend szerint pl. a 10 elõbb van, mint a 2 (a 2-es
számjegyet megelõzi az 1), a numerikus
kifejezéseket csak így lehet sorbarendezni. A numerikus
mezõ tetszõleges számú
szóközzel és tabulátorral kezdõdhet,
tartalmazhat elõjelet, tizedes értékeket, az
ezreseket elválasztó jelet. Minden más jel a
felhasználó számára is érdekes
eredményt szolgáltat.
-o Állomány A rendezés eredményét a
megadott Állományba irányítja. Megadhatjuk
itt ugyanazt az Állománynevet is, amelyiket éppen
rendezünk.
-r Megfordítja a rendezés sorrendjét.
-tKarakter A megadott Karaktert tekinti a sort a mezõket
elválasztó karakternek.
-u Ha a rendezés során több sort
egyenértékûnek talál a sort, akkor a -u
kapcsoló hatására csak egyet ír ki.
-T Könyvtár Az összes, a rendezés során
használatos átmeneti állományt a megadott
Könyvtárba helyezi. Akkor célszerû
használni, ha nagy állományt rendezünk,
és a mi könyvtárunkban (file rendszer) kevés
a hely.
Példák
a következõ minta.txt állományt
különbözõ szempontok szerint:
+Kalmanka 16
lajoska 4
Peterke 28
Jozsika 12
lajoska 34
peterke 28
Sanyika 111
A legegyszerûbb sorbatétel a következõ:
sort minta.txt
+Kalmanka 16
Jozsika 12
Peterke 28
Sanyika 111
lajoska 34
lajoska 4
peterke 28
A rendezés elõször a jeleket, aztán a
nagybetûket, utána a kisbetûket veszi ABC
sorrendben. Ha lexikográfiai rendezést hajtunk
végre a -d kapcsolóval, akkor az figyelmen
kívül hagyja a jeleket, így +Kalmanka a Jozsika
és Sanyika közé kerül. ASCII rendezés
(-A kapcsoló) esetén a jelek a kis és
nagybetûk közé kerülnek, és +Kalmanka
Sanyika és lajoska köze kerül.
A következõ parancs lexikografikus sorrendbe teszi az
állományt úgy, hogy nem tesz
különbséget kis- és nagybetû
között (l. -f kapcsoló), és az
ismétlõdõ sorokat csak egyszer írja ki (l.
-u kapcsoló):
sort -d -f -u minta.txt
Jozsika 12
+Kalmanka 16
lajoska 34
lajoska 4
peterke 28
Sanyika 111
Most nem teszünk különbséget kis- és
nagybetû között, ezért hiányzik a Peterke
28 sor is.
Rendezzük most az állományt a második
mezõ (számok) szerint. A következõ parancs
ABC sorrend szerint rendez, azaz minden 1-gyel kezdõdõ
megelõzi a 2-vel kezdõdõket:
sort +1 minta.txt
Sanyika 111
Jozsika 12
+Kalmanka 16
Peterke 28
peterke 28
lajoska 34
lajoska 4
A következõ parancs a számsorrend szerinti
rendezéshez szolgál:
sort +1 -n minta.txt
lajoska 4
Jozsika 12
+Kalmanka 16
peterke 28
Peterke 28
lajoska 34
Sanyika 111
Amikor a mezõket egymástól nem
szóközök, hanem például
kettõspontok választják el, mint pl. a /etc/passwd
állományban, akkor meg kell adni az
elválasztókaraktert. A rendszer összes
felhasználójáról a sort -t: +4 /etc/passwd
paranccsal kapunk a nevek szerinti ABC sorrendben listát (ha a
rendszergazda nem volt lusta, és beírta a neveket).
A cat és a paste fájlok soronkénti ill. oszlopokkénti
összefűzésére szolgál.
A uniq parancs kiszûri az egy állományban
található ismétlõdõ sorokat.