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 <&lt;<&lt;! ... Ivanov I.I. 224 01 01 Petrov P.P. 123 07 07 Sizov V.I. 224 44 94 ... ! done stroki, zaklyuchennye mezhdu simvolami <&lt;<&lt;! 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 <&lt;<&lt;. Esli sleduyushchaya za <&lt;<&lt; 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 <&lt;<&lt; % 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 <&lt;<&lt; % 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]<&lt; sleduyushchij parametr yavlyaetsya imenem fajla, koto- ryj ispol'zuetsya v kachestve standartnogo fajla vvoda s deskriptorom d (po umolchaniyu d=0); [d]>&gt; sleduyushchij parametr yavlyaetsya imenem fajla, koto- ryj ispol'zuetsya v kachestve standartnogo fajla vyvoda s deskriptorom d (po umolchaniyu d=1); [d]>&gt;>&gt; to zhe chto >&gt;, za isklyucheniem togo, chto vyvodimaya informaciya dopisyvaetsya k koncu soderzhimogo fajla; [d]<&lt;<&lt; vvod osushchestvlyaetsya do teh por, poka ne vstre- chaetsya posledovatel'nost' simvolov, stoyashchaya za dannoj konstrukciej; [d]<&lt;&cifra v kachestve standartnyj fajla vvoda ispol'zuetsya fajl s deskriptorom cifra; [d]>&gt;&cifra v kachestve fajla standartnogo vyvoda ispol'zu- etsya fajl s deskriptorom cifra; [d]<&lt;&- zakryt' standartnyj fajl vvoda; [d]<&lt;>&gt; 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 >&gt;); $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 -