Ocenite etot tekst:


     Shell - komandnyj yazyk,  mogushchij  vypolnyat'  kak  komandy,
vvedennye s terminala, tak i komandy, hranyashchiesya v fajle.


                          |tot tekst podgotovlen NPO "KLOTO"

                Oglavlenie

1. Osnovnye ponyatiya yazyka shell . . . . . . . . . . . . . .
1_1. Vvod-vyvod . . . . . . . . . . . . . . . . . . . . . .
1_2. Sinhronnoe i asinhronnoe vypolnenie komand . . . . . .
1_3. Konvejer . . . . . . . . . . . . . . . . . . . . . . .
1_4. Metasimvoly, generaciya imen fajlov . . . . . . . . . .

2_ Sintaksis yazyka shell  . . . . . . . . . . . . . . . . .
2_1. Kommentarii  . . . . . . . . . . . . . . . . . . . . .
2_2. Podstanovka rezul'tatov vypolneniya komand  . . . . . .
2_3. Peremennye i podstanovka ih znachenij . . . . . . . . .
2_4. Special'nye peremennye . . . . . . . . . . . . . . . .

3_ Upravlyayushchie konstrukcii  . . . . . . . . . . . . . . . .
3_1. Cikl DLYA . . . . . . . . . . . . . . . . . . . . . . .
3_2. Operator vybora  . . . . . . . . . . . . . . . . . . .
3_3. Uslovnyj operator  . . . . . . . . . . . . . . . . . .
3_4. Cikl POKA  . . . . . . . . . . . . . . . . . . . . . .
3_5. Funkcii  . . . . . . . . . . . . . . . . . . . . . . .
3_6. Zarezervirovannye slova  . . . . . . . . . . . . . . .
3_7. Special'nye komandy  . . . . . . . . . . . . . . . . .

4_ Vypolnenie shell-programm  . . . . . . . . . . . . . . .
4_1. Zapusk shella  . . . . . . . . . . . . . . . . . . . .
4_2. Vypolnenie . . . . . . . . . . . . . . . . . . . . . .
4_3. Okruzhenie  . . . . . . . . . . . . . . . . . . . . . .
4_4. Signaly  . . . . . . . . . . . . . . . . . . . . . . .
4_5. Zamechaniya  . . . . . . . . . . . . . . . . . . . . . .

5_ Dopolnitel'nye svedeniya  . . . . . . . . . . . . . . . .
5_1. Komanda test . . . . . . . . . . . . . . . . . . . . .
5_2. Komanda expr . . . . . . . . . . . . . . . . . . . . .
5_3. Komanda ena  . . . . . . . . . . . . . . . . . . . . .





     Tri napravleniya vvoda-vyvoda yavlyayutsya vydelennymi -  stan-
dartnyj vvod, standartnyj vyvod  i  standartnyj  protokol.  Kak
pravilo, komandy berut ishodnye dannye iz standartnogo vvoda  i
pomeshchayut rezul'taty v standartnyj vyvod.
     Standartnye vvod, vyvod i  protokol  mozhno  perenaznachit'.
Oboznachenie

        < 

sluzhit dlya perenaznacheniya standartnogo vvoda (deskriptor fajla
0),

        > 

dlya standartnogo vyvoda (deskriptor fajla 1);

        << 

vvod proishodit so standartnogo vvoda, poka ne vstretitsya  uka-
zannaya  ili konec fajla,

        >> 

dlya standartnogo vyvoda; esli fajl sushchestvuet, to vyvodimaya in-
formaciya dobavlyaetsya k konec etogo fajla,

        <& 

v kachestve standartnogo vvoda ob®yavlyaetsya fajl, associirovannyj
s deskriptorom ; analogichno dlya standartnogo vyvoda

        >& 

        <&- i >&-

zakryvayut sootvetstvenno standartnyj vvod i vyvod.
     Esli lyuboj iz etih konstrukcij predshestvuet  cifra,  to  s
ukazannym fajlom budet associirovan deskriptor, ravnyj  ukazan-
noj cifre, vmesto 0 i 1 po umolchaniyu. Naprimer,

        2 > 

dlya standartnogo protokola ispol'zuetsya deskriptor 2, a

        2 >& 1

associiruet deskriptor 2 s fajlom, associirovannym s deskripto-
rom 1.

            ...  2>protocol
perenaznachaet  standartnyj  protokol  (deskriptor  2) v fajl po
imeni protocol.

CHtoby perenaznachit' standartnyj protokol tuda zhe, kuda uzhe naz-
nachen standartnyj vyvod, sleduet upotrebit' konstrukciyu
            ”...  2>&1

     Vazhen poryadok perenaznacheniya: shell  proizvodit  perenazna-
chenie sleva napravo po ukazannomu spisku. Tak,

        1 > xxx 2 >& 1

snachala associiruet deskriptor 1 s fajlom xxx, a zatem deskrip-
tor 2 s 1, t.e. tozhe s xxx. A

        2 >& 1 1 > xxx

associiruet deskriptor 2 s terminalom, a 1 - s fajlom xxx.

        Mozhno perenaznachit' sistemnyj vvod na tekushchij fajl:

isql - - <

1_2. Sinhronnoe i asinhronnoe vypolnenie komand

Obychno shell zhdet zaversheniya vypolneniya komandy. Odnako imeetsya vozmozhnost' zapustit' zadachu v asinhronnom rezhime, t.e. bez ozhidaniya ee zaversheniya. Dlya etogo posle komandy (posle vseh ee argumentov i ukazanij o perenaznachenii vvoda-vyvoda) nado postavit' znak &. Pri etom po umolchaniyu standartnyj vvod koman- dy naznachaetsya na pustoj fajl /dev/null. Primer: sozdat' fajl primer mozhno po komande echo > primer Eshche primer: zapustit' programmu prog v asinhronnom rezhime, chto- by ne nado bylo dozhidat'sya ego zaversheniya, zasech' vremya vypol- neniya, rezul'taty programmy napravit' v fajl prog.res, dannye o vremeni vypolneniya - v fajl prog.tim. time prog > prog.res 2> prog.tim &

    1_3. Konvejer

Konvejer - posledovatel'nost' komand, razdelennyh znakom |. Esli posle konvejera stoit ; shell zhdet ego zaversheniya. Esli & - to ne zhdet. Rol' ; mozhet igrat' konec stroki. Smysl konvejera v tom, chto standartnyj vyvod odnoj komandy zamykaetsya na stan- dartnyj vvod drugoj. Primer konvejera - podschitat' chislo ob®- ektnyh fajlov v tekushchem kataloge. ls *.o | wc -l

    1_4. Metasimvoly, generaciya imen fajlov

Metasimvoly - simvoly, imeyushchie special'noe znachenie dlya interpretatora : ? * ; & ( ) | ^ < > Odnako kazhdyj iz etih simvolov mozhet predstavlyat' samogo sebya, esli pered nim stoit \. Vse simvoly, zaklyuchennye mezhdu kavychka- mi ' i ', predstavlyayut samih sebya. Mezhdu dvojnymi kavychkami (") vypolnyayutsya podstanovki komand (sm p. 2.2) i parametrov (sm. p. 2.3), a simvoly \, `," i $ mogut ekranirovat'sya predshestvuyushchim simvolom \. Posle vseh podstanovok v kazhdom slove komandy ishchutsya sim- voly *,?, i [. Esli nahoditsya hotya by odin iz nih, to eto slovo rassmatrivaetsya kak shablon imen fajlov i zamenyaetsya imenami fajlov, udovletvoryayushchih dannomu shablonu (v alfavitnom poryadke). Esli ni odno imya fajla ne udovletvoryaet shablonu, to on ostaetsya neizmennym. Znacheniya ukazannyh simvolov: * lyubaya stroka, vklyuchaya i pustuyu ? odin lyuboj simvol [...] lyuboj iz ukazannyh mezhdu nimi simvolov. Para simvolov, razdelennyh znakom -, oznachaet lyuboj simvol, kotoryj nahoditsya mezhdu nimi, vklyuchaya i ih samih. Esli pervym simvolom posle "[" idet "!", to ukazannye simvoly ne dolzhny vhodit' v imya fajla

    * 2_ Sintaksis yazyka shell *

    2_1. Kommentarii

Stroki, nachinayushchiesya s #, traktuyutsya kak kommentarii.

    2_2. Podstanovka rezul'tatov vypolneniya komand

Vyrazheniya mozhno zaklyuchat' v obratnye kavychki (`). Takie vyrazheniya vychislyayutsya v meste ispol'zovaniya. Oni mogut byt', naprimer, chast'yu strok. Primer. Pust' parametrom makrokomandy yavlyaetsya imya fajla s rasshireniem .for. Trebuetsya udalit' odnoi- mennyj fajl s rasshireniem .err. name=`ena -n $1` rm -f ${name}.err Znachenie, poluchennoe v rezul'tate vypolneniya komandy ena -n $1 prisvaivaetsya peremennoj name. Figurnye skobki ispol'zovany dlya vydeleniya argumenta operacii perehoda ot imeni k znacheniyu. Bez nih .err prikleilas' by k imeni.

    2_3. Peremennye i podstanovka ih znachenij

Vse peremennye v yazyke shell - tekstovye. Ih imena dolzhny nachinat'sya s bukvy i sostoyat' iz latinskih bukv, cifr i znaka podcherkivaniya (_). CHtoby vospol'zovatsya znacheniem peremennoj, nado pered nej postavit' simvol $. Ispol'zovanie znacheniya pere- mennoj nazyvaetsya podstanovkoj. Razlichaetsya dva klassa peremennyh: pozicionnye i s imenem. Pozicionnye peremennye - eto argumenty komandnyh fajlov, ih imenami sluzhat cifry: $0 - imya komandy, $1 - pervyj argument i t.d. Znacheniya pozicionnym peremennym mogut byt' prisvoeny i ko- mandoj set (sm. Special'nye komandy). Primer. Posle vyzova programmy na shelle, hranyashchejsya v fajle ficofl: ficofl -d / \*.for znacheniem $0 budet ficofl, $1 - -d, $2 - /, $3 - *.for, znache- niya ostal'nyh pozicionnyh peremennyh budut pustymi strokami. Zametim, chto esli by simvol * pri vyzove ficofl ne byl ekrani- rovan, v kachestve argumentov peredalis' by imena vseh fortran- nyh fajlov tekushchej direktorii. Eshche dve peremennye hranyat komandnuyu stroku za isklyucheniem imeni komandy: $@ ekvivalentno $1 $2 ..., a $* - "$1 $2 ...". Nachal'nye znacheniya peremennym s imenem mogut byt' ustanov- leny sleduyushchim obrazom: = [ = ] ... Ne mozhet byt' odnovremenno funkcii (sm. Upravlyayushchie konstruk- cii) i peremennoj s odinakovymi imenami. Dlya podstanovki znachenij peremennyh vozmozhny takzhe sleduyu- shchie konstrukcii: ${} esli znachenie opredeleno, to ono podstavlyaetsya. Skobki primenyayutsya lish' esli za sleduet simvol, kotoryj bez skobok prikleitsya k imeni. ${:-} esli opredelena i ne yavlyaetsya pustoj strokoj, to podstavlyaetsya ee znachenie; inache podstavlyaetsya . ${:=} esli ne opredelena ili yavlyaetsya pustoj strokoj, ej prisvaivaetsya znachenie ; posle etogo podstavlyaetsya ee znachenie. ${:?} esli opredelena i ne yavlyaetsya pustoj strokoj, to podstavlyaetsya ee znachenie; inache na standartnyj vyvod vyvoditsya i vypolnenie shella zavershaetsya. Esli opushcheno, to vydaetsya soobshchenie "parameter null or not set". ${:+} esli opredelena i ne yavlyaetsya pustoj strokoj, to podstavlyaetsya ; inache podstavlyaetsya pustaya stroka. Primer: esli peremennaya d ne opredelena ili yavlyaetsya pus- toj strokoj, to vypolnyaetsya komanda pwd echo ${d:-`pwd`} Sleduyushchie peremennye avtomaticheski ustanavlivayutsya shellom: # kolichestvo pozicionnyh parametrov (desyatichnoe) - flagi, ukazannye pri zapuske shella ili koman- doj set ? desyatichnoe znachenie, vozvrashchennoe predydushchej sinhronno vypolnennoj komandoj $ nomer tekushchego processa ! nomer poslednego asinhronnogo processa @ ekvivalentno $1 $2 $3 ... * ekvivalentno "$1 $2 $3 ..." Napomnim: chtoby poluchit' znacheniya etih peremennyh, pered nimi nuzhno postavit' znak $. Primer: vydat' nomer tekushchego processa: echo $$

    2_4. Special'nye peremennye

Shellom ispol'zuyutsya sleduyushchie special'nye peremennye: HOME direktoriya, v kotoruyu pol'zovatel' popadaet pri vhode v sistemu ili pri vypolnenii komandy cd bez argumentov PATH spisok polnyh imen katalogov, v kotoryh ishchetsya fajl pri ukazanii ego nepolnogo imeni. PS1 osnovnaya stroka priglasheniya (po umolchaniyu $) PS2 dopolnitel'naya stroka priglasheniya (po umolchaniyu >); v interaktivnom rezhime pered vvodom komandy shellom vyvoditsya osnovnaya stroka priglasheniya. Esli nazhata klavisha new_line, no dlya zaversheniya komandy trebuetsya dal'nejshij vvod, to vyvoditsya dopolnitel'naya stroka priglasheniya IFS posledovatel'nost' simvolov, yavlyayushchihsya razde- litelyami v komandnoj stroke (po umolchaniyu eto , i )

    * 3_ Upravlyayushchie konstrukcii *

Prostaya komanda - eto posledovatel'nost' slov, razdelennaya probelami. Pervoe slovo yavlyaetsya imenem komandy, kotoraya budet vypolnyat'sya, a ostal'nye budut peredany ej kak argumenty. Imya komandy peredaetsya ej kak argument nomer 0 (t.e. imya komandy yavlyaetsya znacheniem $0). Znachenie, vozvrashchaemoe prostoj komandoj - eto ee status zaversheniya, esli ona zavershilas' normal'no, ili (vos'merichnoe) 200+status, esli ona zavershilas' avarijno. Spisok - eto posledovatel'nost' odnogo ili neskol'kih kon- vejerov, razdelennyh simvolami ;, &, && ili || i byt' mozhet za- kanchivayushchayasya simvolom ; ili &. Iz chetyreh ukazannyh operacij ; i & imeyut ravnye prioritety, men'shie, chem u && i ||. Prioritety poslednih takzhe ravny mezhdu soboj. Simvol ; oznachaet, chto kon- vejery budut vypolnyat'sya posledovatel'no, a & - parallel'no. Operaciya && (||) oznachaet, chto spisok, sleduyushchij za nej budet vypolnyat'sya lish' v tom sluchae, esli kod zaversheniya predydushchego konvejera nulevoj (nenulevoj). Komanda - eto libo prostaya komanda, libo odna iz upravlyayu- shchih konstrukcij. Kodom zaversheniya komandy yavlyaetsya kod zavershe- niya ee poslednej prostoj komandy.

    3_1. Cikl DLYA

for [ in ] do done Esli chast' in opushchena, to eto oznachaet in "$@" ( to est' in $1 $2 ... $n). Primer. Vyvesti na ekran vse fortrannye fajly tekushchej biblioteki: for f in *.for do cat $f done

    3_2. Operator vybora

case $ in | ... ) ;; . . . esac Operator vybora vypolnyaet , sootvetstvuyushchij pervomu , kotoromu udovletvoryaet . Forma shablona ta zhe, chto i ispol'zuemaya dlya generacii imen fajlov. CHast' | shablon... mozhet otsutstvovat'. Primer. Opredelit' flagi i otkompilirovat' vse ukazannye fajly. # inicializirovat' flag flag= # povtoryat' dlya kazhdogo argumenta for a do case $a in # ob®edinit' flagi, razdeliv ih probelami -[ocSO]) flag=$flag' ' $a ;; -*) echo 'unknown flag $a' ;; # kompilirovat' kazhdyj ishodnyj fajl i sbrosit' flagi *.c) cc $flag $a; flag= ;; *.s) as $flag $a; flag= ;; *.f) f77 $flag $a; flag= ;; # nevernyj argument *) echo 'unexpected argument $a' ;; esac done

    3_3. Uslovnyj operator.

if then [ elif then ] . . . [ else ] fi Vypolnyaetsya i, esli kod ego zaversheniya 0, to vypolnya- etsya , inache - i, esli i ego kod zaversheniya 0, to vypolnyaetsya . Esli zhe eto ne tak, to vypolnyaetsya . CHasti elif i else mogut otsutstvovat'.

    3_4. Cikl POKA

while do done Do teh por, poka kod zaversheniya poslednej komandy est' 0, vypolnyayutsya komandy . Pri zamene sluzhebnogo slova while na until uslovie vyhoda iz cikla menyaetsya na protivopolozhnoe. V kachestve odnoj iz komand mozhet byt' komanda true (false). Po etoj komande ne vypolnyaetsya nikakih dejstvij, a kod zaversheniya ustanavlivaetsya 0 (-1). |ti komandy primenyayut- sya dlya organizacii beskonechnyh ciklov. Vyhod iz takogo cikla mozhno osushchestvit' lish' po komande break (sm. Special'nye koman- dy).

    3_5. Funkcii

() { ; } Opredelyaetsya funkciya s imenem . Telo funkcii - , zaklyuchennyj mezhdu { i }.

    3_6. Zarezervirovannye slova

Sleduyushchie slova yavlyayutsya zarezervirovannymi: if then else elif fi case in esac for while until do done { }

    3_7. Special'nye komandy

Kak pravilo, dlya vypolneniya kazhdoj komandy shell porozhdaet otdel'nyj process. Special'nye komandy otlichayutsya tem, chto oni vstroeny v shell i vypolnyayutsya v ramkah tekushchego processa. : Pustaya komanda. Vozvrashchaet nulevoj kod zavershe- niya. . file Shell chitaet i vypolnyaet komandy iz fajla file, zatem zavershaetsya; pri poiske file ispol'zuetsya spisok poiska $PATH. break [n] Vyhod iz vnutrennego for ili while cikla; esli ukazano n, to vyhod iz n vnutrennih ciklov. continue [n] Perejti k sleduyushchej iteracii vnutrennego for ili while cikla; esli ukazano n, to perehod k sleduyushchej iteracii n-ogo cikla. cd [ ] Smenit' tekushchuyu direktoriyu na direktoriyu . Po umolchaniyu ispol'zuetsya znachenie HOME. echo [ ... ] Vyvodit svoi argumenty v standartnyj vyvod, razdelyaya ih probelami. eval [ ... ] Argumenty chitayutsya, kak esli by oni postupali iz standartnogo vvoda i rassmatrivayutsya kak ko- mandy, kotorye tut zhe i vypolnyayutsya. exec [ ... ] Argumenty rassmatrivayutsya kak komandy shella i tut zhe vypolnyayutsya, no pri etom ne sozdaetsya novogo processa. V kachestve argumentov mogut byt' ukazany napravleniya vvoda-vyvoda i, esli net nikakih drugih argumentov, to budet izmene- no lish' napravlenie vvoda-vyvoda tekushchej prog- rammy. exit [ n ] Zavershenie vypolneniya shella s kodom zaversheniya n. Esli n opushcheno, to kodom zaversheniya budet kod zaversheniya poslednej vypolnennoj komandy (konec fajla takzhe privodit k zaversheniyu vypol- neniya). export [ ... ] Dannye peremennye otmechayutsya dlya avtomatichesko- go eksporta v okruzhenie (sm. Okruzhenie) vypol- nyaemyh komand. Esli argumenty ne ukazany, to vyvoditsya spisok vseh eksportiruemyh peremen- nyh. Imena funkcij ne mogut eksportirovat'sya. hash [ -r ] [ ... ] Dlya kazhdoj iz ukazannyh komand opredelyaetsya i zapominaetsya put' poiska. Opciya -r udalyaet vse zapomnennye dannye. Esli ne ukazan ni odin argument, to vyvoditsya informaciya o zapomnennyh komandah: hits - kolichestvo obrashchenij shella k dannoj komande; cost - ob®em raboty dlya obnaru- zheniya komandy v spiske poiska; command - polnoe imya komandy. V nekotoryh situaciyah proishodit perevychislenie zapomnennyh dannyh, chto otmecha- etsya znachkom * v pole hits. pwd Vyvodit imya tekushchej direktorii. read [ ... ] CHitaetsya iz standartnogo vvoda odna stroka; pervoe ee slovo prisvaivaetsya pervoj peremen- noj, vtoroe - vtoroj i t.d., prichem vse ostav- shiesya slova prisvaivayutsya poslednej peremen- noj. readonly [ ... ] Zapreshchaetsya izmenenie znachenij ukazannyh pere- mennyh. Esli argument ne ukazan , to vyvoditsya informaciya obo vseh peremennyh tipa readonly. return [ n ] Vyhod iz funkcii s kodom zaversheniya n. Esli n opushcheno, to kodom zaversheniya budet kod zavershe- niya poslednej vypolnennoj komandy. set [ --aefkntuvx [ ... ] ] Komanda ustanavlivaet sleduyushchie rezhimy: -a otmetit' peremennye, kotorye byli izmeneny ili sozdany, kak peremennye okruzheniya (sm. Okruzhe- nie) -e esli kod zaversheniya komandy nenulevoj, to ne- medlenno zavershit' vypolnenie shella -f zapretit' generaciyu imen fajlov -k vse peremennye s imenem pomeshchayutsya v okruzhenie komandy, a ne tol'ko te, chto predshestvuyut imeni komandy (sm. Okruzhenie) -n chitat' komandy, no ne vypolnyat' ih -t zavershenie shella posle vvoda i vypolneniya od- noj komandy -u pri podstanovke rassmatrivat' neustanovlennye peremennye kak oshibki -v vyvesti vvodimye stroki srazu posle ih vvoda -x vyvesti komandy i ih argumenty pered ih vypol- neniem -- ne izmenyaet flagi, polezen dlya prisvaivaniya po- zicionnym peremennym novyh znachenij. Pri ukazanii + vmesto - kazhdyj iz flagov usta- navlivaet protivopolozhnyj rezhim. Nabor tekushchih flagov est' znachenie peremennoj $-. - eto znacheniya, kotorye budut prisvoeny pozicionnym peremennym $1, $2 i t.d. Esli vse argumenty opushcheny, vyvodyatsya znacheniya vseh peremennyh. shift [ n ] Pozicionnye peremennye, nachinaya s $(n+1), pere- imenovyvayutsya v $1 i t.d. Po umolchaniyu n=1. test vychislyaet uslovnye vyrazheniya (sm. Dopolnitel'- nye svedeniya. Test ) trap [ ] [ n ] ... Komanda budet vypolnena, kogda shell po- luchit signal n (sm. Signaly). (Nado zametit', chto proveryaetsya pri ustanovke preryvaniya i pri poluchenii signala). Komandy vypolnyayutsya po poryadku nomerov signalov. Lyubaya popytka us- tanovit' signal, ignoriruemyj dannym processom, ne obrabatyvaetsya. Popytka preryvaniya po signa- lu 11 (segmentation violation) privodit k oshib- ke. Esli opushchen, to vse preryvaniya usta- navlivayutsya v ih nachal'nye znacheniya. Esli est' pustaya stroka, to etot signal ignoriruetsya shellom i vyzyvaemymi im programmami. Esli n=0, to vypolnyaetsya pri vyhode iz shella. Trap bez argumentov vyvodit spisok komand, svyazannyh s kazhdym signalom. type [ ... ] Dlya kazhdogo imeni pokazyvaet, kak ono budet in- terpretirovat'sya pri ispol'zovanii v kachestve imeni komandy: kak vnutrennyaya komanda shella, kak imya fajla ili zhe takogo fajla net voobshche. ulimit [ -f ] [ n ] Ustanavlivaet razmer fajla v n blokov; -f - us- tanavlivaet razmer fajla, kotoryj mozhet byt' zapisan processom-potomkom (chitat' mozhno lyubye fajly). Bez argumentov - vyvodit tekushchij raz- mer. umask [ nnn ] Pol'zovatel'skaya maska sozdaniya fajlov izmenya- etsya na nnn. Esli nnn opushcheno, to vyvoditsya te- kushchee znachenie maski. Primer: posle komandy umask 755 budut sozdavat'sya fajly, kotorye vladelec smo- zhet chitat', pisat' i vypolnyat', a vse ostal'nye - tol'ko chitat' i vypolnyat'. unset [ ... ] Dlya kazhdogo imeni udalyaet sootvetstvuyushchuyu pere- mennuyu ili funkciyu. Peremennye PATH, PS1, PS2 i IFS ne mogut byt' udaleny. wait [ n ] ZHdet zaversheniya ukazannogo processa i vyvodit kod ego zaversheniya. Esli n ne ukazano, to ozhi- daetsya zaversheniya vseh aktivnyh processov-po- tomkov i vozvrashchaetsya kod zaversheniya 0.

    * 4_ Vypolnenie shell-programm *

    4_1. Zapusk shella

Programma, interpretiruyushchaya shell-programmy, nahoditsya v fajle /bin/sh. Pri zapuske ee pervyj argument yavlyaetsya imenem shell-programmy, ostal'nye peredayutsya kak pozicional'nye para- metry. Esli fajl, soderzhashchij shell-programmu, imeet pravo vy- polneniya (x), to dostatochno ukazaniya lish' ego imeni. Naprimer, sleduyushchie dve komandy operacionnoj sistemy ekvivalentny (esli fajl ficofl obladaet ukazannym pravom i na samom dele soderzhit shell-programmu): sh ficofl -d . g\* i ficofl -d . g\*

    4_2. Vypolnenie

Pri vypolnenii shell-programm vypolnyayutsya vse podstanovki. Esli imya komandy sovpadaet s imenem special'noj komandy, to ona vypolnaetsya v ramkah tekushchego processa. Tak zhe vypolnyayutsya i opredelennye pol'zovatelem funkcii. Esli imya komandy ne sovpa- daet ni s imenem special'noj komandy, ni s imenem funkcii, to porozhdaetsya novyj process i osushchestvlyaetsya popytka vypolnit' ukazannuyu komandu. Peremennaya PATH opredelyaet put' poiska direktorii, soder- zhashchej dannuyu komandu. Po umolchaniyu eto ::/bin:/usr/ bin:/util:/dss/rk Direktorii poiska razdelyayutsya dvoetochiyami; :: oznachaet tekushchuyu direktoriyu. Esli imya komandy soderzhit simvol /, znachenie $PATH ne ispol'zuetsya: imena, nachinayushchiesya s / ishchutsya ot kornya, os- tal'nye - ot tekushchej direktorii. Polozhenie najdennoj komandy zapominaetsya shellom i mozhet byt' oprosheno komandoj hash.

    4_3. Okruzhenie

Okruzhenie - eto nabor par imya-znachenie, kotorye peredayutsya vypolnyaemoj programme. Shell vzaimodejstvuet s okruzheniem nes- kol'kimi sposobami. Pri zapuske shell sozdaet peremennuyu dlya kazhdoj ukazannoj pary, pridavaya ej sootvetstvuyushchee znachenie. Esli vy izmenite znachanie kakoj-libo iz etih peremennyh ili sozdadite novuyu peremennuyu, to eto ne okazhet nikakogo vliyaniya na okruzhenie, esli ne budet ispol'zovana komanda export dlya svyazi peremennoj shella s okruzheniem (sm. takzhe set -a). Pere- mennaya mozhet byt' udalena iz okruzheniya komandoj unset (sm.). Takim obrazom, okruzhenie kazhdoj iz vypolnyaemyh shellom komand formiruetsya iz vseh neizmenennyh par imya-znachenie, pervonachal'- no poluchennyh shellom, minus pary, udalennye komandoj unset, plyus vse modificirovannye i izmenennye pary, kotorye dlya etogo dolzhny byt' ukazany v komande export. Okruzhenie prostyh komand mozhet byt' sformirovano ukazaniem pered nej odnogo ili neskol'kih prisvaivanij peremennym. Tak, TERM=d460 i (export TERM; TERM=d460; ) ekvivalentny. Peremennye, uchastvuyushchie v takih prisvaivaniyah, nazovem klyuchevymi parametrami. Esli ustanovlen flag -k (sm. set), to vse klyuchevye para- metry pomeshchayutsya v okruzhenie komandy, dazhe esli oni zapisany posle komandy.

    4_4. Signaly

UNIXom podderzhivayutsya sleduyushchie signaly: SIGHUP - 1 - otmenit' (hangup) SIGINT - 2 - preryvanie (interrupt) SIGQUIT - 3 - nestandartnyj vyhod (quit) SIGILL - 4 - nevernaya komanda (illegal instruction) SIGTRAP - 5 - lovushka (trace trap) SIGFPE - 8 - isklyuchitel'naya situaciya pri vypolnenii operacij s plavayushchej zapyatoj (floating-point exception) SIGKILL - 9 - unichtozhenie processa (kill) SIGBUS - 10 - oshibka shiny (bus error) SIGSEGV - 11 - narushenie segmentacii (segmentation violation) SIGSYS - 12 - nevernyj sistemnyj vyzov (bad argument to sys- tem call) SIGPIPE - 13 - zapis' v kanal bez chteniya iz nego (write on a pipe with no one to read it) SIGALRM - 14 - budil'nik (alarm clock) SIGTERM - 15 - programmnoe zavershenie processa (software ter- mination signal) Signaly SIGINT i SIGQUIT ignoriruyutsya, esli komanda byla zapushchena asinhronno. Inache signaly obrabatyvayutsya tak zhe, kak v processe-predke, za isklyucheniem signala SIGSEGV (sm. takzhe Spe- cial'nye komandy. Trap).

    4_5. Zamechaniya

Pri vypolnennii komand zapominaetsya ih mestonahozhdenie. Poetomu pri sozdanii komandy s tem zhe imenem, no nahodyashchejsya v drugoj direktorii, vse ravno budet vypolnyat'sya staraya komanda (esli vyzov proishodit po korotkomu imeni). Dlya ispravleniya si- tuacii vospol'zujtes' komandoj hash s klyuchom -r (sm. Special'- nye komandy). Esli vy pereimenovali tekushchuyu ili vyshelezhashchuyu direktoriyu, to komanda pwd mozhet davat' nevernuyu informaciyu. Dlya ispravle- niya situacii vospol'zujtes' komandoj cd s polnym imenem direk- torii.

    * 5_ Dopolnitel'nye svedeniya *

    5_1. Komanda test

Komanda test primenyaetsya dlya proverki usloviya. Format vy- zova: test ili [ ] Komanda test vychislyaet i, esli ego znachenie - isti- na, vozvrashchaet kod zaversheniya 0 (true); inache - nenulevoe zna- chenie (false). Nenulevoj kod zaversheniya vozvrashchaetsya i esli opushcheny argumenty. mozhet sostoyat' iz sleduyushchih pri- mitivov: -r fajl - istina, esli fajl sushchestvuet i dostupen dlya chteniya -w fajl - istina, esli fajl sushchestvuet i dostupen dlya zapisi -x fajl - istina, esli fajl sushchestvuet i yavlyaetsya vy- polnyaemym -f fajl - istina, esli fajl sushchestvuet i yavlyaetsya obych- nym fajlom -d fajl - istina, esli fajl sushchestvuet i yavlyaetsya di- rektoriej -c fajl - istina, esli fajl sushchestvuet i yavlyaetsya spe- cial'nym simvol'no-orientirovannym fajlom -b fajl - istina, esli fajl sushchestvuet i yavlyaetsya spe- cial'nym blok-orientirovannym fajlom -p fajl - istina, esli fajl sushchestvuet i yavlyaetsya ime- novannym kanalom (pipe) -s fajl - istina, esli fajl sushchestvuet i imeet nenule- vuyu dlinu -t [ deskriptor fajla ] - istina, esli otkrytyj fajl s ukazannym desk- riptorom (po umolchaniyu 1) sushchestvuet i associi- rovan s terminalom -zho s1 - istina, esli dlina stroki s1 nulevaya -n s1 - istina, esli dlina stroki s1 nenulevaya s1 = s2 - istina, esli stroki s1 i s2 sovpadayut s1 != s2 - istina, esli stroki s1 i s2 ne sovpadayut s1 - istina, esli s1 nepustaya stroka n1 -eq n2 - istina, esli celye n1 i n2 algebraicheski sov- padayut . Na meste -eq mogut byt' takzhe -ne, -gt, -ge, -lt, -le

    5_2. Komanda expr

Komanda expr primenyaetsya dlya vychisleniya vyrazhenij. Rezul'- tat vyvoditsya na standartnyj vyvod. Operandy vyrazheniya dolzhny byt' razdeleny probelami. Metasimvoly dolzhny byt' ekranirovany. Nado zametit', chto 0 vozvrashchaetsya v kachestve chisla, a ne dlya indikacii pustoj stroki. Stroki, soderzhashchie probely ili drugie special'nye simvoly, dolzhny byt' zaklyucheny v kavychki. Celye rassmatrivayutsya kak 32-bitnye chisla. Nizhe priveden spisok operatorov v poryadke vozvrastaniya prioriteta, operacii s ravnym prioritetom zaklyucheny v figurnye skobki. Pered simvolami, kotorye dolzhny byt' ekranirovany, sto- it \. \| esli pervoe ne pustoe i ne nulevoe, to vozvrashchaet ego, inache vozvrashchaet vtoroe \& esli oba ne pustye i ne nulevye, to vozvrashchaet pervoe , inache vozvrashchaet 0 { =, \>, \>=, \<, \<=, != } vozvrashchaet rezul'tat celochislennogo sravneniya esli oba - celye; inache vozvrashchaet re- zul'tat leksicheskogo sravneniya { +, - } slozhenie i vychitanie celochislennyh argumentov { \*, /, % } umnozhenie, delenie i poluchenie ostatka ot dele- niya celochislennyh argumentov : operator sopostavleniya : sopostavlyaet pervyj argument so vtorym, kotoryj dolzhen byt' regu- lyarnym vyrazheniem. Obychno operator sravneniya vozvrashchaet chislo simvolov, udovletvoryayushchih ob- razcu (0 pri neudachnom sravnenii). Odnako sim- voly \( i \) mogut primenyat'sya dlya vydeleniya chasti pervogo argumenta. Regulyarnoe vyrazhenie stroitsya sleduyushchim obrazom: . - oboznachaet lyuboj simvol * - oboznachaet predydushchij simvol, povtorennyj neskol'ko raz [] - oboznachayut lyuboj odin iz ukazannyh mezhdu nimi simvo- lov; gruppa simvolov mozhet oboznachat'sya s pomoshch'yu znaka "-" (t.e. [0-9] ekvivalentno [0123456789]); es- li posle [ stoit ^, to eto ekvivalentno lyubomu simvo- lu, krome ukazannyh v skobkah i ; dlya ukazaniya ] v kachestve obrazca, nado postavit' ee srazu za [ (t.e. []...]); . i * vnutri kvadratnyh skobok oboznachayut samih sebya Vse ostal'nye simvoly (i ^, esli stoit ne v kvadratnyh skobkah) oboznachayut samih sebya. Dlya ukazaniya simvolov ., *,[ i ] nado ekranirovat' ih (t.e. pisat' \., \*, \[, \]). Primery. 1. a=`expr $a + 1` - uvelichenie na 1 peremennoj a 2. expr $a : '.*/\(.*\)' \| $a - vydelyaet iz imeni fajla korotkoe imya (t.e. iz /usr/util/ena vydelyaetsya ena). Vnimanie, odinochnyj simvol / budet vosprinyat kak znak operacii deleniya. 3. expr $VAR : '.*' - poluchenie kolichestva simvolov peremennoj VAR. V kachestve pobochnogo effekta expr vozvrashchaet sleduyushchie kody za- versheniya: 0 - esli vyrazhenie ne nul' i ne pustaya stroka 1 - esli vyrazhenie nul' ili pustaya stroka 2 - dlya nekorrektnyh vyrazhenij Komanda expr takzhe vydaet sleduyushchie soobshcheniya ob oshibkah: syntax error - dlya oshibok v operatorah ili operandah non-numeric argument - dlya popytok primeneniya arifmeticheskih operacij k nechislovym strokam Zamechanie. Dopustim, chto my hotim sravnit' znachenie peremennoj a s kakim-libo simvolom, imeyushchim dlya expr osobyj smysl, naprimer, so znakom ravenstva. Pust' $a na samom dele yavlyaetsya znakom ra- venstva. Tak kak argumenty predvaritel'no obrabatyvayutsya shel- lom, to komanda expr $a = '=' budet vosprinyata kak expr = = = chto sintaksicheski nekorrektno. V podobnyh sluchayah nado pol'zo- vat'sya takim priemom: expr X$a = X= t.e. dobavleniem nekotorogo simvola k obeim strokam, chto nikak ne vliyaet na rezul'tat sravneniya, odnako pozvolyaet izbezhat' sintaksicheskoj oshibki.

    5_3. Komanda ena

Komanda ena pozvolyaet poluchit' chasti polnogo imeni fajla. Pervyj argument - flag, vtoroj - imya fajla. Komanda razlichaet sleduyushchie flagi: -n - imya fajla bez rasshireniya -f - imya fajla s rasshireniem -e - rasshirenie -d - imya direktorii -p - esli imya fajla nachinaetsya s . ili .. , to eti simvoly vydelyayutsya iz imeni Nizhe privoditsya tekst programmy ena, hranyashchijsya v /util/ena. # Get part of pathname case $1 in -n ) expr $2 : '.*/\(.*\)[.].*' \| $2 : '\(.*\)[.].*' \| $2 ;; -f ) expr $2 : '.*/\(.*\)' \| $2 ;; -e ) expr $2 : '.*\([.][^./]*\)' \| ' ' ;; -d ) expr $2 : '\(.*\)/.*' \| $2 ;; -p ) expr $2 : '\([.]\)/.*' \| $2 : '\([.][.]\)/.*' \| ' ' ;; * ) echo "error: unknown part of pathname $1" exit 2 ;; esac

Last-modified: Sun, 07 Jul 2002 09:31:58 GMT
Ocenite etot tekst: