else ...
if ...
then ...
else if ...
...
fi
fi
fi
mozhno ispol'zovat' sokrashchennuyu zapis':
if ...
then ...
elif ...
then ...
elif ...
...
fi
Konstrukciya
if komanda1
then komanda2
fi
mozhet byt' zapisana v vide:
komanda1 && komanda2
V konstrukcii
komanda1 || komanda2
komanda2 vypolnyaetsya tol'ko v tom sluchae, esli komanda1 ne
- 23 -
byla vypolnena uspeshno. Kodom zaversheniya obeih konstrukcij
yavlyaetsya kod zaversheniya poslednej prostoj komandy.
3.8. Lokal'nyj fajl
V procedure tel, rassmotrennoj v ranee, ishodnye dannye
dlya komandy grep berutsya iz fajla /usr/lib/pfone. Obrabaty-
vaemye dannye mogut neposredstvenno vklyuchat'sya v komandnyj
fajl. Dlya etogo oni oformlyayutsya v vide lokal'nogo fajla. V
sleduyushchem primere:
for i
do grep $i <<<<!
...
Ivanov I.I. 224 01 01
Petrov P.P. 123 07 07
Sizov V.I. 224 44 94
...
!
done
stroki, zaklyuchennye mezhdu simvolami <<<<! i !, peredayutsya
komande grep v kachestve dannyh standartnogo fajla vvoda.
Stroka-ogranichitel' ! vybrana zdes' proizvol'no: glavnoe,
chtoby ona sovpadala s posledovatel'nost'yu simvolov, stoyashchej
za znakami <<<<.
Esli sleduyushchaya za <<<< posledovatel'nost' simvolov ne
nachinaetsya so znaka \, to prezhde chem lokal'nyj fajl stanet
dostupnym komande, v nem vypolnyayutsya vse podstanovki para-
metrov.
Naprimer, pust' fajl edg soderzhit stroki vida:
ed $3 <<<< %
g/$1/s//$2/g
w
%
pri vyzove:
edg stroka1 stroka2 file
budet dostignut rezul'tat, kotoryj mozhno poluchit' pri vypol-
nenii sleduyushchej posledovatel'nosti komand:
ed file <<<< %
g/stroka1/s//stroka2/g
w
%
- 24 -
3.9. Otladka komandnyh fajlov
V SHELL ispol'zuyutsya dva mehanizma otladki komandnyh
fajlov. Pervyj iz nih:
set -v
vyvodit stroki komandnogo fajla po mere ih chteniya. |tot
rezhim primenyaetsya pri poiske sintaksicheskih oshibok. Dlya ego
ispol'zovaniya ne trebuetsya proizvodit' modifikaciyu komand-
nogo fajla, naprimer:
sh -v proc...
zdes' proc - imya komandnogo fajla. Klyuch -v mozhet ispol'zo-
vat'sya vmeste s klyuchom -n, predotvrashchayushchim vypolnenie sledu-
yushchih za nim komand (komanda set -n blokiruet terminal do teh
por, poka ne vvoditsya priznak konca fajla EOF).
Komanda
set -h
vyvodit komandy po mere ih vypolneniya. Dlya otmeny klyuchej -x
i -v mozhno vospol'zovat'sya komandoj
set -
a dlya ustanovki - prisvoit' sootvetstvuyushchee znachenie makro-
peremennoj -.
4. PARAMETRY I OBLASTX DEJSTVIYA MAKROPEREMENNYH
Makroperemennye, opredelennye v odnom processe, pri
otsutstvii yavnyh ukazanij ne dostupny v drugih processah.
Dlya togo chtoby obespechit' vozmozhnost' peredachi porozhdaemomu
processu kakoj-libo informacii, v yazyke predusmotrenny
sredstva, kotorye pozvolyayut:
- peredavat' komande parametry;
- eksportirovat' opredeleniya makroperemennyh iz sredy
tekushchego processa v sredu porozhdaemogo;
- opredelyat' makroperemennye i peredavat' ih opredeleniya
v sredu porozhdaemogo processa bez izmeneniya sredy teku-
shchego.
Tak, v sleduyushchem primere:
USER=nata komanda
pered vypolneniem fajla komanda makroperemennaya USER
- 25 -
prinimaet znachenie nata. Pri ispol'zovanii flaga -k opera-
tory vida imya=znachenie mogut vstavlyat'sya v lyuboe mesto
spiska parametrov. Takie imena nazyvayutsya klyuchevymi para-
metrami. Znacheniya parametrov prisvaivayutsya makroperemennym
s imenami "1", "2", ... N (poskol'ku chislo v imeni makrope-
remennoj ukazyvaet poziciyu parametra v komandnoj stroke,
takie parametry nazyvayutsya pozicionnymi).
Dlya togo chtoby prisvoit' znacheniya pozicionnym paramet-
ram neposredstvenno iz komandnogo fajla ispol'zuetsya komanda
set. Tak, v sleduyushchem primere
set *
parametru "1" budet prisvoeno znachenie imeni pervogo fajla
tekushchego spravochnika, parametru "2" - imya vtorogo fajla i
t.d.
Pri vypolnenii komand interpretator proizvodit sleduyu-
shchie dejstviya:
- Podstanovka znachenij parametrov, naprimer:
$user
- Podstanovka rezul'tatov vypolneniya komand, naprimer:
`pwd`
V teh sluchayah, kogda v stroke trebuetsya vypolnit' nes-
kol'ko vlozhennyh makropodstanovok, ispol'zuetsya vstro-
ennaya komanda eval. Naprimer, esli znacheniem makropere-
mennoj X yavlyaetsya stroka $y, a makroperemennoj y - pqr,
to komanda
eval echo $X
vydast stroku pqr.
Rezul'taty vypolneniya komandy eval yavlyayutsya vhodnymi
dannymi dlya SHELL, kotoryj schityvaet ih i vypolnyaet v
kachestve komand. Takim obrazom, konstrukciya
wg='eval who | grep'
$wg fred
ekvivalentna komande
who | grep fred
- 26 -
V etom primere bez komandy eval ne obojtis', tak kak
metasimvol | pri posleduyushchej makropodstanovke ne
interpretiruetsya.
- Interpretaciya simvolov-razdelitelej.
Simvoly, poluchennye v rezul'tate vypolneniya ukazannyh
vyshe podstanovok, razbivayutsya zatem na slova, ne soder-
zhashchie razdelitelej. Probelami zdes' nazvany simvoly,
yavlyayushchiesya razdelitelyami slov. Spisok etih simvolov
soderzhitsya v makroperemennoj IFS; po umolchaniyu k nim
otnosyatsya probel, simvoly gorizontal'noj tabulyacii i
novoj stroki. Esli special'noe znachenie probela otme-
nit' odnim iz sushchestvuyushchih sposobov, to on budet
interpretirovat'sya sootvetstvuyushchej posledovatel'nost'yu
simvolov. Naprimer, komanda
echo ''
budet vydavat' pustuyu stroku, poskol'ku ona yavlyaetsya
pervym argumentom komandy echo, v to vremya kak vyzov
komandy
echo $null
budet osushchestvlyat'sya bez argumentov, esli znachenie mak-
roperemennoj null ne opredeleno ili opredeleno kak
pustaya stroka.
- Zadanie imen fajlov.
Na etom etape v slovah osushchestvlyaetsya poisk simvolov *,
? i [...] (yavlyayushchihsya obrazcami imen fajlov) i zamena
kazhdogo slova spiskom imen fajlov, raspolozhennyh v
alfavitnom poryadke. Kazhdoe imya fajla rassmatrivaetsya
kak otdel'nyj parametr.
Nad slovami, soderzhashchimisya v operatore cikla for,
vypolnyayutsya vse perechislennye dejstviya. V opreratore case
vypolnyaetsya tol'ko podstanovka znacheniya parametra, ukazyvae-
mogo posle klyuchevogo slova case.
Kak otmechalos', v yazyke SHELL sushchestvuyut tri mehanizma
ekranirovaniya metasimvolov (s ispol'zovaniem simvolov \,
'...' i "..."). Vnutri strok, zaklyuchennyh v dvojnye kavychki,
vypolnyayutsya tol'ko podstanovki znachenij parametrov i rezul'-
tatov vypolneniya komand. Dalee perechisleny simvoly, kotorye
pri zaklyuchenii ih v dvojnye kavychki ne teryayut svoego speci-
al'nogo znacheniya:
- 27 -
$ podstanovka znachenij parametrov;
` podstanovka rezul'tatov vypolneniya komand;
ogranichitel' ekraniruemoj stroki;
\ ekraniruet metasimvoly $, `, " i \.
Naprimer, v komande
echo $h
znachenie makroperemennoj x yavlyaetsya edinstvennym argumentom.
Analogichno, v komande
echo $*
vse pozicionnye parametry rassmatrivayutsya v kachestve edinst-
vennogo argumenta; eta komanda ekvivalentna sleduyushchej:
echo $1 $2 ...
Makrovyzovy $@ i $* identichny, za isklyucheniem sposobov ih
ekranirovaniya. Komandy
echo $@
i
echo $1 $2 ...
ekvivalentny. V rezul'tate ih vypolneniya budut vydavat'sya
znacheniya vseh pozicionnyh parametrov.
Na risunke 1 pokazano vozdejstvie mehanizmov ekraniro-
vaniya na kazhdyj iz metasimvolov yazyka SHELL.
Metasimvoly
$ * ` " '
-|------------------|
' | - - - - - t |
` | + - - t - - |
" | + + - + t - |
_|__________________|
+ metasimvol ekraniruetsya;
- metasimvol ne ekraniruetsya;
t ogranichitel' ekraniruemoj stroki.
Ris.1
- 28 -
4.1. Peredacha parametrov
Kak pozicionnye, tak i klyuchevye parametry mogut byt'
polucheny v processe vyzova komandnogo fajla. Klyuchevye para-
metry, krome togo, mozhno sdelat' dostupnymi eshche odnim sposo-
bom: nuzhno yavno ukazat', chto oni vvodyatsya v sredu processa
(stanovyatsya makroperemennymi). Naprimer, komanda:
export USER BOX
ukazyvaet na to, chto takimi makroperemennymi yavlyayutsya USER i
BOX. Pri vyzove komandnogo fajla sozdayutsya kopii vseh mak-
roperemennyh. Izmenenie znachenij makroperemennyh ne vyzyvaet
ih modifikacii v porozhdayushchem processe. Komandnyj fajl ne
mozhet izmenit' sostoyanie porozhdayushchego processa bez yavnogo
vyzova so storony porozhdayushchego processa. (Isklyuchenie sos-
tavlyayut deskriptory raspredelennyh fajlov).
Imena makroperemennyh, imeyushchih postoyannye znacheniya,
mogut zadavat'sya s pomoshch'yu komandy readonly (tol'ko dlya chte-
niya). Format etoj komandy sovpadaet s formatom komandy
export:
readonly imya...
Posle vypolneniya etoj komandy znacheniya perechislennyh makro-
peremennyh bol'she izmenit' nel'zya.
4.2. Podstanovka znachenij parametrov
Esli parametru yazyka SHELL ne bylo prisvoeno znachenie,
to on opredelyaetsya kak pustaya stroka. Pri vypolnenii
komandy
echo ${d-.}
vydaetsya znachenie makroperemennoj d, esli ona opredelena,
ili simvol '.' - v protivnom sluchae. V komande echo ispol'-
zuyutsya obychnye soglasheniya ob otmene special'nyh znachenij
metasimvolov. Sledovatel'no, esli znachenie makroperemennoj d
ne bylo opredeleno, to komanda
echo ${d-'*'}
vyvedet simvol *. Analogichno, komanda
echo ${d-$X}
esli makroperemennaya d opredelena, vydast ee znachenie, esli
net - znachenie makroperemennoj X.
Znachenie po umolchaniyu makroperemennoj mozhet byt' opre-
deleno sleduyushchim obrazom:
- 29 -
echo ${d=.}
esli makroperemennaya d ne opredelena, ej prisvaivaetsya sim-
vol '.' (dlya pozicionnyh parametrov oboznachenie ${...=...}
ispol'zovat' nel'zya).
Komanda
echo ${d?soobshchenie}
vydaet znachenie makroperemennoj d, esli ono opredeleno, i
soobshchenie - esli ne opredeleno. V poslednem sluchae vypolne-
nie komandnogo fajla zavershaetsya. Esli soobshchenie otsutst-
vuet, to vydaetsya standartnaya diagnostika interpretatora.
Komandnyj fajl, chast' parametrov kotorogo dolzhna imet' opre-
delennye znacheniya, mozhet nachinat'sya sleduyushchim obrazom:
: ${USER?} ${HOME?} ${BIN?}
...
Dvoetochie : predstavlyaet soboj vstroennuyu komandu yazyka
SHELL, prednaznachennuyu dlya ocenki znachenij svoih parametrov.
Esli znachenie hotya by odnoj iz peremennyh USER, HOME ili BIN
ne opredeleno, vydaetsya diagnostika i vypolnenie komandnogo
fajla prekrashchaetsya.
4.3. Podstanovka rezul'tatov vypolneniya komand
V yazyke SHELL sushchestvuet vozmozhnost' ispol'zovaniya
rezul'tata vypolneniya komand v razlichnyh celyah. Tak, stan-
dartnym vyhodom komandy pwd yavlyaetsya imya tekushchego spravoch-
nika, i esli takim spravochnikom yavlyaetsya, naprimer,
/usr/nata/bin, to komanda
d=`pwd`
budet ekvivalentna komande
d=/usr/nata/bin
Stroka, zaklyuchennaya mezhdu obratnymi kavychkami `...`, vospri-
nimaetsya kak komanda i zamenyaetsya rezul'tatom vypolneniya
etoj komandy. Komandy zapisyvayutsya s ispol'zovaniem obychnyh
soglashenij ob otmene special'nyh znachenij metasimvolov, za
isklyucheniem togo, chto special'noe znachenie simvola obratnoj
kavychki "`" otmenyaetsya simvolom \. Naprimer, komanda
ls `echo $1`
ekvivalentna komande
ls $1
- 30 -
Vezde, gde razreshena podstanovka znachenij parametrov,
mozhet proizvodit'sya i podstanovka rezul'tatov vypolneniya
komand (v tom chisle i v lokal'nyh fajlah). Obrabotka rezul'-
tatov v oboih sluchayah vypolnyaetsya odinakovo. |to pozvolyaet
ispol'zovat' v procedurah yazyka SHELL komandy, prednaznachen-
nye dlya obrabotki strok. Primerom takoj komandy yavlyaetsya
komanda basename, kotoraya udalyaet iz slova ukazannyj suf-
fiks. Naprimer, v rezul'tate vypolneniya komandy
basename main.c .c
budet poluchena posledovatel'nost' simvolov main. Ispol'zova-
nie komandy basename mozhno proillyustrirovat' sleduyushchim frag-
mentom komandy cc:
case $A in
...
*.c) B=`basename $A .c`
...
esac
V etom primere makroperemennoj B prisvaivaetsya znachenie mak-
roperemennoj A, iz kotoroj udalen suffiks .c.
4.4. Obrabotka oshibok
Dejstviya interpretatora pri obnaruzhenii oshibki zavisyat
ot dvuh obstoyatel'stv: tipa oshibki i rezhima raboty interpre-
tatora. Rezhim raboty interpretatora schitaetsya interaktivnym
v tom sluchae, esli vvod/vyvod informacii osushchestvlyaetsya s
terminala ili interpretator vyzvan s klyuchom -i.
Privedem spisok prichin, kotorye privodyat k oshibkam pri
vypolnenii komandy:
- nevernoe ukazanie fajlov vvoda/vyvoda (naprimer, fajl
ne sushchestvuet ili ne mozhet byt' sozdan);
- samoj komandy ne sushchestvuet, ili ona ne mozhet byt'
vypolnena;
- komanda vyzvalas' normal'no, no ee kod zaversheniya
imeet nenulevoe znachenie.
Esli interpretator rabotaet v interaktivnom rezhime, to,
nezavisimo ot rezul'tata zaversheniya predydushchej komandy, on
perehodit k vypolneniyu sleduyushchej.
V ne interaktivnom rezhime dva vida oshibok privodyat k
prekrashcheniyu obrabotki komandnogo fajla:
- sintaksicheskaya oshibka v operatorah upravleniya (while,
until, if, for);
- 31 -
- oshibka pri vypolnenii vstroennoj komandy.
Dlya togo chtoby obespechit' prekrashchenie vypolneniya
komandy pri obnaruzhenii lyuboj iz ukazannyh oshibok, pri
vyzove interpretatora neobhodimo ispol'zovat' klyuch -e.
4.5. Obrabotka preryvanij
Signaly, vyzyvayushchie preryvanie vypolneniya komandy,
perechisleny v tabl.1.
V zavisimosti ot svoego rezhima raboty, pri poluchenii
signala interpretator postupaet sleduyushchim obrazom. Esli
rezhim raboty - interaktivnyj, to (takzhe kak i pri obnaruzhe-
nii oshibki) zavershiv vypolnenie tekushchej komandy, on perejdet
k vypolneniyu sleduyushchej. Esli zhe rezhim - neinteraktivnyj,
interpretator zavershit vypolnenie tekushchej komandy, posle
chego libo prekratit rabotu, libo vozvratitsya v interaktivnyj
rezhim.
Tablica 1
Signaly sistemy DEMOS
------------------------------------------------------------
Signal Opisanie
------------------------------------------------------------
0 vyhod iz interpretatora (po lyuboj prichine, vklyuchaya
dostizhenie konca fajla)
1 zavisanie
2 preryvanie
3* vyhod (CTRL/Q sozdaetsya fajl core, soderzhashchij kopiyu
operativnoj pamyati processa)
4* zapreshchennaya komanda (ne sbrasyvaetsya posle priema)
5* ispol'zovanie komandy BPT (preryvanie trassirovki)
6* ispol'zovanie komandy preryvaniya vvoda/vyvoda IOT
7* ispol'zovanie komandy EMT
8* oshibka operacii s plavayushchej tochkoj
9 unichtozhit' process (ne mozhet byt' perehvachen ili pro-
ignorirovan)
10* oshibka shiny
11* narushenie zashchity pamyati
12* nepravil'nyj parametr v sistemnom vyzove
13 zapis' po kanalu mezhprocessnoj svyazi pri otsutstvii
chteniya processom-poluchatelem
14 preryvanie po zadannomu vremeni
15 preryvanie programmy (po komande kill)
16 ne ispol'zuetsya
------------------------------------------------------------
Komandy, otmechennye znakom *, osushchestvlyayut kopirovanie
operativnoj pamyati processa. Odnako, sam interpretator igno-
riruet eti signaly.
- 32 -
Pri postuplenii signala preryvaniya vypolnyayutsya nekoto-
rye standartnye dejstviya, posle chego obraboka komandnogo
fajla obychno zavershaetsya. Esli eto po tem ili inym prichinam
ne ustraivaet pol'zovatelya, on mozhet zadat' svoi metody
reakcii na opredelennye tipy preryvanij. Dlya etoj celi v
yazyke SHELL primenyaetsya vstroennaya komanda trap. Naprimer,
komanda
trap 'rm /tmp/ps$$; exit' 2
perehvatyvaet signal 2 (preryvanie) i vypolnyaet komandu
rm /tmp/ps$$; exit
Vstroennaya komanda exit preryvaet vypolnenie komandnogo
fajla.
Sushchestvuet tri sposoba obrabotki signalov:
1. Signaly ignoriruyutsya (v etom sluchae signal voobshche ne
posylaetsya processu).
2. Signaly perehvatyvayutsya (reakciya na signal obespechivaetsya
samim processom).
3. Signaly propuskayutsya bez obrabotki. Rabota processa
zavershaetsya.
Esli pri vhode v komandnyj fajl signal ignoriruetsya, to
ignoriruetsya i komanda trap.
Esli argumentom komandy trap yavlyaetsya pustaya stroka, to
procedura ignoriruet signaly. V kachestve primera mozhno pri-
vesti fragment komandy nohup:
trap '' 1 2 3 15
posle vypolneniya kotorogo kak procedura, tak i vyzyvayushchie ee
komandy budut ignorirovat' perechislennye signaly.
Standartnaya reakciya na signaly mozhet byt' vosstanov-
lena, naprimer, sleduyushchej komandoj:
trap 2 3
Spisok tekushchih znachenij signalov sistemy mozhet byt' poluchen
s pomoshch'yu komandy
trap
Eshche odnim primerom ispol'zovaniya komandy trap (bez pos-
leduyushchego vyhoda iz komandnogo fajla) yavlyaetsya procedura
- 33 -
scan, kotoraya osushchestvlyaet prosmotr podspravochnikov v teku-
shchem spravochnike i vypolnenie komand, vvodimyh s terminala,
do polucheniya signala konec_fajla ili preryvanie. Signal
preryvanie dejstvuet tol'ko po okonchanii vypolneniya komandy.
Tekst procedury scan imeet sleduyushchij vid:
d=`pwd`
for i in *
do if test -d $d/$i
then cd $d/$i
while echo $i:
trap exit 2
read x
do trap : 2; eval $x; done
fi
done
Vstroennaya komanda read x schityvaet stroki iz fajla stan-
dartnogo vvoda i prisvaivaet rezul'tat ih vypolneniya makro-
peremennoj x. Signaly konec_fajla ili preryvanie prekrashchayut
vypolnenie etoj komandy s kodom zaversheniya, ne ravnym nulyu.
5. VYZOV INTERPRETATORA
Vsled za registraciej pol'zovatelya v sisteme (s pomoshch'yu
komandy login) vyzyvaetsya interpretator yazyka SHELL. Esli
registracionnyj spravochnik pol'zovatelya soderzhit fajl .pro-
file, to prezhde chem s terminala budet prinyata hotya by odna
komanda, interpretator vypolnyaet etot fajl (podrazumevaetsya,
chto fajl .profile soderzhit komandy).
Pri vyzove mogut ukazyvat'sya sleduyushchie klyuchi:
-c stroka
Komandy schityvayutsya iz zadannoj stroki.
-s Komandy chitayutsya iz standartnogo fajla vvoda. Soobshche-
niya interpretatora zapisyvayutsya v standartnyj fajl
diagnostik.
-i Interaktivnyj rezhim raboty.
Esli pervym simvolom parametra "0" yavlyaetsya znak -, to
komandy schityvayutsya iz fajla .profile.
6. SVODKA OSNOVNYH KONSTRUKCIJ YAZYKA SHELL
- 34 -
Tablica 2
SPECIALXNYE SIMVOLY
------------------------------------------------------------
Simvol Opisanie
------------------------------------------------------------
# komentarij;
| sozdat' kanal svyazi processov;
~ sozdat' kanal svyazi processov;
; razdelitel' komand;
& zapustit' sleduyushchij process, ne ozhidaya okonchaniya pre-
dydushchego;
&& vypolnit' sleduyushchuyu komandu, esli kod zaversheniya pre-
dydushchej raven nulyu;
|| vypolnit' sleduyushchuyu komandu, esli kod zaversheniya pre-
dydushchej ne raven nulyu;
'...' literal'naya konstanta;
"..." posle podstanovki znachenij makroperemennyh, stroka
rassmatrivaetsya kak literal'naya konstanta;
\ otmenyaet special'noe znachenie sleduyushchego za nim sim-
vola.
------------------------------------------------------------
Tablica 3
VVOD-VYVOD
------------------------------------------------------------
Konstrukciya Opisanie
------------------------------------------------------------
[d]<< sleduyushchij parametr yavlyaetsya imenem fajla, koto-
ryj ispol'zuetsya v kachestve standartnogo fajla
vvoda s deskriptorom d (po umolchaniyu d=0);
[d]>> sleduyushchij parametr yavlyaetsya imenem fajla, koto-
ryj ispol'zuetsya v kachestve standartnogo fajla
vyvoda s deskriptorom d (po umolchaniyu d=1);
[d]>>>> to zhe chto >>, za isklyucheniem togo, chto vyvodimaya
informaciya dopisyvaetsya k koncu soderzhimogo
fajla;
[d]<<<< vvod osushchestvlyaetsya do teh por, poka ne vstre-
chaetsya posledovatel'nost' simvolov, stoyashchaya za
dannoj konstrukciej;
[d]<<&cifra v kachestve standartnyj fajla vvoda ispol'zuetsya
fajl s deskriptorom cifra;
[d]>>&cifra v kachestve fajla standartnogo vyvoda ispol'zu-
etsya fajl s deskriptorom cifra;
[d]<<&- zakryt' standartnyj fajl vvoda;
[d]<<>> otkryt' ukazannyj fajl dlya chteniya (zapisi).
------------------------------------------------------------
- 35 -
Tablica 4
ZADANIE IMEN FAJLOV
------------------------------------------------------------
Konstrukciya Opisanie
------------------------------------------------------------
? sootvetstvuet odinochnomu simvolu;
* sootvetstvuet stroke simvolov (v t.ch. pustoj);
[...] sootvetstvuet odnomu iz perechislennyh simvolov;
para simvolov, razdelennaya znakom -, sootvetst-
vuet lyubomu simvolu iz ukazannogo promezhutka;
------------------------------------------------------------
Tablica 5
PODSTANOVKA ZNACHENIJ PARAMETROV
------------------------------------------------------------
Konstrukciya Opisanie
------------------------------------------------------------
$n zamenit' $n znacheniem n;
$* "1 2 ..."
$@ "1" "2" ...
$# chislo pozicionnyh parametrov;
$- klyuchi, kotorye vvodyatsya pri vyzove ili s
pomoshch'yu komandy set;
$? kod zaversheniya poslednej komandy;
$$ nomer tekushchego processa;
$! nomer processa poslednej fonovoj komandy;
imya=znachenie opredelenie makroperemennoj;
${imya-slovo} esli imya opredeleno, podstavit' znachenie,
inache - slovo;
${imya=slovo} ispol'zovat' znachenie imeni; esli ne oprede-
leno - prisvoit' i ispol'zovat' znachenie
slovo;
${imya?slovo} ispol'zovat' znachenie imeni, esli opredeleno,
inache - napechatat' slovo i prekratit' vypolne-
nie komandnogo fajla;
${imya+slovo} ispol'zovat' slovo, esli imya opredeleno, inache
- nichego ne delat';
$HOME imya spravochnika dlya komandy cd bez parametrov;
$PATH spisok imen spravochnikov dlya poiska komand;
$MAIL fajl dlya priema pochty;
$PS1 podskazka interpretatora (po umolchaniyu $);
$PS2 podskazka interpretatora dlya prodolzhenii vvoda
komandy (po umolchaniyu >>);
$IFS razdeliteli slov komandnoj stroki (po umolcha-
niyu probel, znak tabulyacii i novoj stroki);
------------------------------------------------------------
- 36 -
Prodolzhenie tablicy 5
------------------------------------------------------------
Konstrukciya Opisanie
------------------------------------------------------------
$TERM tip terminala.
------------------------------------------------------------
- 37 -
KOMANDNYJ YAZYK
for imya [in slovo...]
do spisok_komand
done
case slovo in
[obr1 [|obr2]...) spisok_komand;;]
...
esac
if spisok_komand
then spisok_komand
[elif spisok_komand then spisok_komand]
[else spisok_komand]
fi
while spisok_komand
[do spisok_komand]
done
until spisok_komand
[do spisok_komand]
done
(spisok_komand)
{ spisok_komand; }
break [n]
vyhod iz ciklov for, case, while ili until na urovne n;
continue
perehod k sleduyushchej iteracii cikla for, while ili
until;
exit [N]
vyhod s kodom zaversheniya N;
: ne proizvodit nikakih dejstvij, za isklyucheniem podsta-
novki znachenij makroperemennyh.
- 38 -
VSTROENNYE KOMANDY
. fajl
vypolnit' komandnyj fajl v ramkah tekushchego processa;
eval [komanda ...]
provesti vse makropodstanovki i vypolnit' "komandu
...";
exec [komanda ...]
tekushchij process zamenit' processom vypolneniya komandy
...;
export [imya ...]
kopirovat' opredelenie makroperemennoj imya v sredu
porozhdaemyh processov;
read imya ...
schitat' fajl standartnogo vvoda i prisvoit' znachenie
makroperemennoj imya;
readonly [imya ...]
zapretit' pereopredelenie makroperemenoj;
set [-ekntuvx [par ...]]
ustanovit' rezhimy raboty interpretatora (znacheniya klyu-
chej sm. v opisanii komandy sh);
shift
pereimenovat' pozicionnye parametry; 1=2 ...;
times
vydat' vremya, zatrachennoe na vypolnenie processa;
trap [komanda] [n]
vypolnit' komandu, esli poluchen signal n;
umask [nnn]
maska sozdaniya fajla - obratnyj kod (v vos'merichnoj
sisteme);
wait [pid]
ozhidat' okonchaniya processa s nomerom pid.
- 39 -
SODERZHANIE
ANNOTACIYA ......................................... 2
1. VVEDENIE .......................................... 3
2. OSNOVNYE PONYATIYA .................................. 3
2.1. Prostye komandy ................................. 4
2.2. Fonovye processy ................................ 4
2.3. Zadanie imen fajlov ............................. 4
2.4. Otmena special'nogo znacheniya metasimvolov ....... 6
2.5. Zadanie fajlov vvoda/vyvoda ..................... 6
2.6. Svyaz' processov, konvejery i fil'try ............ 8
2.7. Makroperemennye ................................. 9
2.8. Vydacha podskazok ................................ 12
2.9. Sostavnye komandy ............................... 12
2.10. Vstroennye komandy .............................. 12
3. KOMANDNYE FAJLY ................................... 15
3.1. Kommentarii ..................................... 17
3.2. Komanda test .................................... 17
3.3. Operator for .................................... 18
3.4. Operator case ................................... 19
3.5. Operatory while i until ......................... 21
3.6. Operatory break i continue ...................... 22
3.7. Operator if ..................................... 22
3.8. Lokal'nyj fajl .................................. 24
3.9. Otladka komandnyh fajlov ........................ 25
4. PARAMETRY I OBLASTX DEJSTVIYA MAKROPEREMENNYH ...... 25
4.1. Peredacha parametrov ............................. 29
4.2. Podstanovka znachenij parametrov ................. 29
4.3. Podstanovka rezul'tatov vypolneniya komand ....... 30
4.4. Obrabotka oshibok ................................ 31
4.5. Obrabotka preryvanij ............................ 32
5. VYZOV INTERPRETATORA .............................. 34
6. SVODKA OSNOVNYH KONSTRUKCIJ YAZYKA SHELL ........... 34
- 40 -