Ocenite etot tekst:









          Proizvodstvenno-vnedrencheskij kooperativ

                    "I N T E R F E J S"













                Dialogovaya Edinaya Mobil'naya

                    Operacionnaya Sistema

                        Demos/P 2.1










                       Komandnyj yazyk

                           SHELL














                           Moskva

                            1988















                        ANNOTACIYA

     Opisyvaetsya interpretator komandnogo yazyka shell.  Opi-
sany elementy yazyka, operator I struktura programm na shell,
a takzhe vstroennye vozmozhnosti.





























































1.  VVEDENIE

     V semejstve operacionnyh sistem, sovmestimyh s OS UNIX,
yazyk SHELL ispol'zuetsya v kachestve standartnogo yazyka uprav-
leniya zadaniyami, t.e. yavlyaetsya osnovnym yazykom obshcheniya pol'-
zovatelya s sistemoj.  On predostavlyaet sredstva dlya opisaniya
takih dejstvij, kak, naprimer, zapusk  kakogo-libo  kompilya-
tora ili programmy, sozdanie, kopirovanie i unichtozhenie faj-
lov, opros sostoyaniya processov.  Krome  togo,  SHELL  shiroko
primenyaetsya  i v kachestve yazyka razrabotki osobyh programm -
komandnyh fajlov.  Poslednee svojstvo ob®yasnyaetsya  tem,  chto
SHELL imeet mnogo obshchego s universal'nymi yazykami programmi-
rovaniya, v chastnosti, konstrukcii, kotorye pozvolyayut  sozda-
vat' programmy, soderzhashchie proverki uslovij i cikly.

     Vazhnym dostoinstvom  yazyka,  yavlyaetsya  vozmozhnost'  ego
poetapnogo  izucheniya.   Dlya  togo chtoby nachat' rabotu v sis-
teme,  pol'zovatelyu  dostatochno  oznakomit'sya   s   razdelom
"Osnovnye ponyatiya" dannogo dokumenta.

2.  OSNOVNYE PONYATIYA

     Posle registracii pol'zovatelya vsya dal'nejshaya rabota  s
sistemoj  vypolnyaetsya pod upravleniem programmy sh - interp-
retatora komandnogo yazyka SHELL.

     Vo vremya raboty pol'zovatel' vydaet komandy i  poluchaet
soobshcheniya sistemy o rezul'tatah ih vypolneniya.  Kak pravilo,
pri poluchenii komandy interpretator  opredelyaet  imya  fajla,
soderzhashchego   programmu,  kotoruyu  neobhodimo  vypolnit',  i
porozhdaet process, kotoryj rabotaet pod upravleniem zadannoj
programmy.   Isklyucheniya  sostavlyayut sluchai, kogda vyzyvayutsya
vstroennye komandy yazyka SHELL, pri etom ukazannye  dejstviya
vypolnyayutsya  neposredstvenno  interpretatorom bez porozhdeniya
novogo processa.  Poskol'ku, v kachestve imeni komandy  mozhet
ukazyvat'sya  lyuboj  fajl,  soderzhashchij ispolnyaemuyu programmu,
sushchestvuet prakticheski bezgranichnaya  vozmozhnost'  rasshireniya
nabora komand.

     S ponyatiem processa  v  DEMOS  svyazano  ponyatie  sredy.
Sreda  formiruetsya  processom-roditelem  i soderzhit dopolni-
tel'nuyu informaciyu o sposobe vypolneniya  processa.   Kazhdomu
processu stavitsya v sootvetstvie tri fajla: standartnyj fajl
vvoda, standartnyj fajl vyvoda i fajl diagnosticheskih  soob-
shchenij.  Pri zapuske komandy pol'zovatel' mozhet ukazat' fajly
kotorye budut primenyat'sya v kachestve standartnyh.  Po  umol-
chaniyu,  vvod/vyvod  informacii  osushchestvlyaetsya  s  terminala
pol'zovatelya.

     Harakternoj chertoj sistem, sovmestimyh s OS UNIX, yavlya-
etsya  estestvennaya  vozmozhnost' raboty s neskol'komi proces-
sami odnovremenno.  Pol'zovatel' mozhet  ukazat'  v  komande,
chto  sootvetstvuyushchij  process  dolzhen  rabotat'  kak fonovyj


                           - 3 -










(t.e. perehod k priemu sleduyushchej komandy osushchestvlyaetsya  bez
ozhidaniya  okonchaniya  dannogo processa).  Krome togo, sushchest-
vuet vozmozhnost'  zadaniya  komand,  dlya  vypolneniya  kotoryh
interpretator  porozhdaet neskol'ko vzaimodejstvuyushchih proces-
sov.  Pri etom sozdaetsya  cepochka  processov  (konvejer),  v
kotoroj  obrabatyvaemaya informaciya peredaetsya ot odnogo pro-
cessa drugomu po kanalu mezhprocessnoj svyazi.

2.1.  Prostye komandy

     Prostye komandy sostoyat iz odnogo ili neskol'kih  slov,
razdelennyh probelami. Pervoe slovo yavlyaetsya imenem vypolnya-
emoj komandy;  vse  ostal'nye  slova  peredayutsya  komande  v
kachestve parametrov.  Naprimer,

                             who

predstavlyaet soboj  komandu,  kotoraya  vydaet  informaciyu  o
pol'zovatelyah, zaregistrirovannyh v sisteme.  Komanda

                            ls -l

vydaet spisok fajlov tekushchego spravochnika.  Parametr -l uka-
zyvaet  komande  ls, chto nuzhna informaciya o harakteristikah,
razmere i date sozdaniya kazhdogo fajla.

2.2.  Fonovye processy

     Dlya togo, chtoby vypolnit' komandu, interpretator  yazyka
SHELL  obychno  sozdaet  novyj process i zhdet ego zaversheniya.
Pol'zovatel' mozhet zapuskat' processy v fonovom rezhime,  pri
etom  interpretator  perehodit k obrabotke sleduyushchej komandy
srazu posle zapuska  processa,  ne  ozhidaya  okonchaniya  ranee
zapushchennogo.  Naprimer, komanda:

                       cc program.c &

vyzyvaet kompilyator dlya obrabotki fajla  program.c.   Simvol
&,  zavershayushchij stroku, ukazyvaet interpretatoru komand, chto
sleduet perejti k obrabotke sleduyushchej komandy  bez  ozhidaniya
okonchaniya  translyacii.  Dlya posleduyushchego nablyudeniya za hodom
processa sistema  soobshchaet  unikal'nyj  nomer,  po  kotoromu
mozhno zaprashivat' informaciyu o ego sostoyanii.

2.3.  Zadanie imen fajlov

     V  yazyke  SHELL  predusmotren  mehanizm  dlya  generacii
spiska   imen   fajlov,   kotorye  sootvetstvuyut  nekotoromu
obrazcu.  Naprimer, pri vypolnenii komandy:

                          ls -l *.c

v  kachestve  parametrov  ls  peredayutsya  imena  vseh  fajlov


                           - 4 -










tekushchego  spravochnika,  kotorye okanchivayutsya na .c. Simvol *
imeet special'noe znachenie (t.e. yavlyaetsya metasimvolom yazyka
SHELL), emu sootvetstvuet lyubaya stroka (v tom chisle pustaya).
Pri zadanii obrazcov mogut ispol'zovat'sya sleduyushchie metasim-
voly:

*      sootvetstvuet lyuboj stroke simvolov  (vklyuchaya  pustuyu
       stroku);

?      sootvetstvuet lyubomu odinochnomu simvolu;

[...]  sootvetstvuet lyubomu iz perechislennyh  vnutri  skobok
       simvolov;  para  simvolov,  razdelennyh znakom minus,
       budet sootvetstvovat'  lyubomu  simvolu  iz  zadannogo
       leksicheskogo promezhutka.

     Naprimer, obrazcu

                           [A-YA]*

sootvetstvuyut vse imena v tekushchem spravochnike, kotorye nachi-
nayutsya s propisnoj russkoj bukvy, a obrazcu

                      /usr/nata/test/?

sootvetstvuyut  vse  odnosimvol'nye  imena   iz   spravochnika
/usr/nata/test.  Esli ne najdeno ni odnogo fajla, sootvetst-
vuyushchego zadannomu obrazcu, to v kachestve  parametra  komande
peredaetsya sam obrazec.

     Opisannyj mehanizm  sokrashchaet  vremya  nabora  komand  i
pozvolyaet  vybirat'  imena,  otvechayushchie  nuzhnomu obrazcu. On
takzhe mozhet  ispol'zovat'sya  pri  poiske  fajlov.  Naprimer,
komanda

                    echo /usr/nata/*/core

nahodit i pechataet polnye imena vseh fajlov core iz podspra-
vochnikov  spravochnika /usr/nata (komanda echo yavlyaetsya stan-
dartnoj komandoj DEMOS,  kotoraya  pechataet  svoi  parametry,
razdelyaya ih probelami).

     Iz  obshchih  pravil,  ukazannyh  dlya  obrazcov,   imeetsya
edinstvennoe  isklyuchenie.  Simvol  '.'  v nachale imeni fajla
dolzhen ukazyvat'sya yavno.  Poetomu komanda:

                           echo *

budet vydavat' vse imena fajlov v tekushchem spravochnike, koto-
rye ne nachinayutsya s tochki, a komanda:

                           echo .*



                           - 5 -










napechataet imena fajlov, nachinayushiesya s tochki.   |to  pozvo-
lyaet isklyuchit' neumyshlennuyu podmenu imen "." i "..", kotorye
sootvetstvenno oznachayut tekushchij spravochnik i osnovnoj  spra-
vochnik.

2.4.  Otmena special'nogo znacheniya metasimvolov

     Dlya yazyka  SHELL  simvoly  imeyut  special'noe  znachenie
(polnyj  spisok  metasimvolov priveden v tabl.2 Prilozheniya).
Lyuboj  metasimvol,  kotoromu  predshestvuet  obratnaya  cherta,
teryaet  svoe  special'noe znachenie (dejstvie \ rasprostranya-
etsya tol'ko na sleduyushchij za nim simvol, pri etom sam znak  \
ignoriruetsya).  Tak, komanda:

                          echo \?

napechataet tol'ko znak voprosa '?', a komanda:

                           echo \\

vydast lish' odin simvol \.  Dlya zapisi  dlinnyh  konstrukcij
bolee chem v odnoj stroke, special'noe znachenie simvola novoj
stroki \n otmenyaetsya.

     Znak \ udoben dlya otmeny special'nogo znacheniya  otdel'-
nyh  simvolov.  Kogda  zhe neobhodimo ekranirovat' srazu nes-
kol'ko metasimvolov, takoj mehanizm okazyvaetsya slishkom gro-
mozdkim. V etom sluchae posledovatel'nost' znakov zaklyuchaetsya
v apostrofy. Naprimer, komanda:

                       echo hh'****'hh

napechataet

                          hh****hh


     Simvol novoj stroki \n, zaklyuchennyj v apostrofy, teryaet
svoe special'noe znachenie. Odnako, ekranirovat' sam apostrof
takim sposobom nel'zya.

     Eshche odnim mehanizmom otmeny special'nogo znacheniya  sim-
volov yavlyaetsya zaklyuchenie ih v dvojnye kavychki.

2.5.  Zadanie fajlov vvoda/vyvoda

     Rezul'taty raboty  bol'shinstva  komand  zapisyvayutsya  v
standartnyj fajl vyvoda. Po umolchaniyu vsya vydavaemaya proces-
som informaciya otobrazhaetsya na terminal  pol'zovatelya.   Pri
neobhodimosti ona mozhet byt' zapisana i v obychnyj fajl. Tak,
v sleduyushchem primere:




                           - 6 -










                       ls -l > filels

konstrukciya "> filels" rassmatrivaetsya kak ukazanie  ispol'-
zovat'  v  kachestve  standartnogo vyvoda komandy ls zadannyj
fajl (v dannom sluchae fajl filels).  Esli fajl s dannym ime-
nem otsutstvuet, interpretator komand sozdaet ego. Esli fajl
sushchestvuet, to ego ishodnoe soderzhimoe  zamenyaetsya  informa-
ciej, vydavaemoj komandoj.

     Esli trebuetsya sohranit' soderzhimoe  fajla,  dobaviv  v
nego  postupayushchuyu  informaciyu, vmesto simvola >> ispol'zuetsya
konstrukciya >>>>. Naprimer:

                        ls >>>> filels

V dannom sluchae, esli fajl ne sushchestvuet, on takzhe predvari-
tel'no sozdaetsya sistemoj.

     Analogichnye vozmozhnosti predostavlyayutsya i dlya pereopre-
deleniya  standartnogo  fajla vvoda (po umolchaniyu dannye vvo-
dyatsya s terminala).  Dlya etoj celi  ispol'zuetsya  simvol  <&lt;.
Naprimer, komanda:

                        wc <&lt; filels

vydaet kolichestvo strok fajla filels.

     Dalee perechisleny  osnovnye  konstrukcii,  ispol'zuemye
dlya zadaniya fajlov vvoda/vyvoda.

>&gt; fajl
     V kachestve standartnogo fajla vyvoda ispol'zuetsya fajl,
     kotoryj  perezapisyvaetsya  zanovo  ili  sozdaetsya, esli
     ranee ne sushchestvoval.

>&gt;>&gt; fajl
     Postupayushchaya informaciya dobavlyaetsya k soderzhimomu fajla.
     Esli fajl ne sushchestvuet, on predvaritel'no sozdaetsya.

<&lt; fajl
     V kachestve standartnogo fajla vvoda ispol'zuetsya fajl.

<&lt;<&lt; fajl
     CHtenie lokal'nogo fajla (sm. razdel 4.8).   Posleduyushchie
     stroki  peredayutsya  komande v kachestve informacii stan-
     dartnogo fajla vvoda do teh  por,  poka  ne  vstretitsya
     stroka,  soderzhashchaya  posledovatel'nost'  simvolov fajl.
     Esli special'noe znachenie pervogo simvola  stroki  fajl
     otmeneno,  vypolnyayutsya  podstanovki znachenij makropere-
     mennyh i rezul'tatov vypolneniya komand.

>&gt;& cifra
     Informaciya, zapisyvaemaya v fajl s  deskriptorom  cifra,


                           - 7 -










     peredaetsya v standartnyj fajl vyvoda.

<&lt;& cifra
     Standartnym fajlom vvoda yavlyaetsya fajl  s  deskriptorom
     cifra.

<&lt;&-  Fajl standartnogo vvoda zakryt na zapis'.

>&gt;&-  Fajl standartnogo vyvoda zakryt na chtenie.

2.6.  Svyaz' processov, konvejery i fil'try

     Informaciya, vydavaemaya v standartnyj fajl vyvoda  odnoj
komandoj,  mozhet neposredstvenno peredavat'sya drugoj komande
v kachestve soderzhimogo standartnogo fajla vvoda.   Naprimer,
v rezul'tate raboty komand:

                           ls | wc

budet vydano obshchee chislo simvolov v imenah tekushchego spravoch-
nika.   Sostavnaya  komanda,  obrazovannaya s pomoshch'yu operacii
"|", nazyvaetsya konvejerom. V dannom  sluchae  ona  vypolnyaet
dejstvie ekvivalentnoe komandam:

                     ls >&gt; filels
                     wc <&lt; filels
                     rm filels

za tem isklyucheniem, chto dlya hraneniya promezhutochnyh rezul'ta-
tov  ne  ispol'zuetsya  nikakih  fajlov.   V konvejere kazhdaya
komanda  rabotaet  kak  parallel'nyj  nezavisimyj   process,
informaciya peredaetsya v odnom napravlenii. Esli vhodnye dan-
nye processa-poluchatelya eshche ne gotovy, ili  vyhodnye  dannye
processa-istochnika ne uspevayut obrabatyvat'sya, to vypolnenie
sootvetstvuyushchego processa priostanavlivaetsya.

     Fil'trom nazyvaetsya komanda, kotoraya, poluchaya dannye iz
standartnogo  fajla  vvoda,  proizvodit  kakuyu-libo rabotu i
vydaet rezul'tat v standartnyj fajl vyvoda.  Tipichnym prime-
rom  fil'tra mozhet sluzhit' komanda grep, kotoraya, chitaya dan-
nye iz standartnogo fajla vvoda, vybiraet stroki, soderzhashchie
ukazannuyu  posledovatel'nost'  simvolov  i vydaet ih v stan-
dartnyj fajl vyvoda.  Naprimer, komanda:

                       ls | grep old

vydaet tol'ko te imena fajlov tekushchego spravochnika,  kotorye
soderzhat  posledovatel'nost'  simvolov  old.   Konveer mozhet
sostoyat' bolee chem iz dvuh processov.   Naprimer,  konstruk-
ciya:

                   ls | grep bak | wc -l



                           - 8 -










mozhet ispol'zovat'sya dlya podscheta chisla imen fajlov v  teku-
shchem  spravochnike, kotorye soderzhat posledovatel'nost' simvo-
lov bak.

2.7.  Makroperemennye

     Imya makroperemennoj predstavlyaet  soboj  posledovatel'-
nost'  bukv,  cifr  i simvolov podcherkivaniya, nachinayushchuyusya s
bukvy.

     Pri vypolnenii operatora prisvaivaniya v komandnuyu sredu
tekushchego  processa  zanositsya  zapis'  tipa  imya=znachenie, v
levoj chasti kotoroj stoit imya makroperemennoj, a v pravoj  -
posledovatel'nost'  simvolov,  yavlyayushchayasya  ee  znacheniem.  V
komandnoj stroke vse vhozhdeniya vida $imya zamenyayutsya znacheni-
yami  sootvetstvuyushchih  makroperemennyh (isklyuchenie sostavlyayut
sluchai, kogda podobnye  konstrukcii  zaklyucheny  v  apostrofy
'...' ili simvolu $ predshestvuet znak \).

     Primery:

USER=nata HOME=/usr/nata
     prisvaivanie znachenij makroperemennym USER i HOME;

null=
     prisvaivanie makroperemennoj znacheniya pustoj stroki;

echo $USER
     vypolnenie   podstanovki    znacheniya    makroperemennoj
     (rezul'tat - stroka nata).

     Peremennye mogut ispol'zovat'sya dlya  vvedeniya  sokrashche-
nij.  Tak, pri vypolnenii komand:

           b=/usr/nata/bin
           mv pgm $b

fajl pgm budet peremeshchen iz tekushchego spravochnika v  spravoch-
nik /usr/nata/bin.

     V bolee obshchem vide  makrovyzov  zapisyvaetsya  sleduyushchim
obrazom:

           ${imya_makroperemennoj}

Figurnye skobki v dannom sluchae igrayut rol'  razdelitelej  i
ispol'zuyutsya togda, kogda za imenem sleduet bukva ili cifra.
Naprimer, v rezul'tate vypolneniya gruppy komand:

          P=PROB
          PA=PERA
          echo  ${P}A $PA



                           - 9 -










budet vydan tekst:

          PROBA PERA


     V yazyke SHELL sushchestvuyut  special'nye  makroperemennye,
kotorye  opredelyayutsya pered nachalom vypolneniya komandy (isk-
lyuchenie sostavlyaet makroperemennaya ?, kotoraya poluchaet  zna-
chenie posle vypolneniya komandy):

?    Desyatichnoe  celoe  chislo  -  kod  zaversheniya  poslednej
     vypolnennoj  komandy. V bol'shinstve sluchaev, pri uspesh-
     nom vypolnenii komand, znachenie koda  zaversheniya  ravno
     nulyu.  V  protivnom sluchae, esli komanda zakonchilas' ne
     udachno, kod zaversheniya ne raven nulyu.

#    Kolichestvo poluchennyh parametrov.

$    Nomer dannogo processa. Poskol'ku dlya kazhdogo  processa
     sushchestvuet  svoj  nomer,  to  eta makroperemennaya chasto
     ispol'zuetsya dlya  sozdaniya  unikal'nyh  imen  vremennyh
     fajlov. Naprimer:

                ps a >&gt;/tmp/ps$$
                . . .
                rm /tmp/ps$$


!    Nomer poslednego processa, zapushchennogo v kachestve fono-
     vogo.

-    Tekushchie klyuchi (ustanovlennye rezhimy) interpretatora  sh
     tipa -x i -v.

     Perechislennye dalee makroperemennye yazyka SHELL,  imeyut
dlya sistemy osobyj smysl i ne dolzhny ispol'zovat'sya v drugih
celyah:

MAIL  Pered tem kak vydat'  pervuyu  podskazku  interpretator
      prosmatrivaet  fajl,  imya  kotorogo yavlyaetsya znacheniem
      etoj makroperemennoj. Esli  dannyj  fajl  izmenyalsya  s
      momenta  poslednego prosmotra, budet vydanno soobshchenie
      you have mail (vam prishla pochta).  Znachenie etoj  mak-
      roperemennoj  obychno  ustanavlivaetsya  pri  vypolnenii
      fajla .profile.

      Naprimer:

                     MAIL=/usr/mail/nata


HOME  Imya spravochnika dlya komandy cd bez parametrov.   Poisk
      fajlov,  imena  kotoryh  ne  nachinayutsya  s  simvola /,


                           - 10 -










      osushchestvlyaetsya v tekushchem spravochnike.  Dlya smeny teku-
      shchego  spravochnika  primenyaetsya  komanda cd.  Naprimer,
      komanda:

                      cd /usr/nata/bin


      naznachaet tekushchim spravochnik /usr/nata/bin.  Komanda:

                          cat show


      vyvodit na terminal soderzhimoe fajla show iz  spravoch-
      nika  /usr/nata/bin. Komanda cd bez parametrov ekviva-
      lentna komande:

                          cd $HOME


      znachenie etoj makroperemennoj takzhe  obychno  opredelya-
      etsya v fajle .profile.

PATH  |ta makroperemennaya  opredelyaet  spisok  spravochnikov,
      prosmatrivaemyh  pri  poiske  komandy.   Esli znachenie
      makroperemennoj PATH  ne  opredeleno,  to  prinimaetsya
      sleduyushchij poryadok prosmotra: tekushchij spravochnik, spra-
      vochnik /bin i spravochnik /usr/bin.  Pri yavnom  zadanii
      znacheniya  makroperemennoj PATH imena spravochnikov raz-
      delyayutsya simvolom :.  Naprimer:

                   PATH= :/usr/nata/bin:/bin:/usr/bin


      oznachaet, chto prosmotr spravochnikov  budet  vestis'  v
      sleduyushchem  poryadke: tekushchij spravochnik (pustaya poziciya
      pered  pervym  simvolom  :),  /usr/nata/bin,  /bin   i
      /usr/bin. Takim obrazom, konkretnye pol'zovateli mogut
      imet' svoi lichnye  komandy,  dostupnye  nezavisimo  ot
      togo,  kakoj  spravochnik  yavlyaetsya  tekushchim.  Esli imya
      komandy nachinaetsya s simvola /  (t.e.  zadanno  polnoe
      imya  ispolnyaemogo  fajla),  to poisk v spravochnikah ne
      vedetsya.  V etom sluchae delaetsya  vsego  odna  popytka
      vypolnit' ukazannuyu komandu.

PS1   Podskazka interpretatora (po  umolchaniyu  dlya  obychnogo
      pol'zovatelya - $).

PS2   Podskazka interpretatora, oznachayushchaya prodolzhenie vvoda
      (po umolchaniyu >&gt;).

IFS   Mnozhestvo simvolov-razdelitelej, interpretiruemyh  kak
      probely.



                           - 11 -










TERM  Tip svyazannogo s processom terminala.

2.8.  Vydacha podskazok

     Pri rabote s terminala, kogda interpretator gotov  pri-
nyat'  sleduyushchuyu  komandu, po umolchaniyu vydaetsya podskazka $.
Ona mozhet byt' izmenena komandoj:

                          PS1=vvod:

posle vypolneniya kotoroj podskazka budet  imet'  vid  stroki
vvod:.

     Esli vvedennaya stroka soderzhit  sintaksicheski  nezaver-
shennuyu  konstrukciyu,  dlya  prodolzheniya  vvoda  interpretator
vydaet v kachestve podskazki simvol >&gt;.  Podskazka, oboznachayu-
shchaya prodolzhenie vvoda, mozhet byt' izmenena s pomoshch'yu komandy
prisvaivaniya novogo znacheniya makroperemennoj PS2.

Naprimer, komanda:

                      PS2=Prodolzhenie:

ustanovit v kachestve podskazki stroku Prodolzhenie:.

2.9.  Sostavnye komandy

     Sushchestvuet dva sposoba ob®edineniya neskol'kih komand  v
odnu sostavnuyu komandu:

                     { spisok_komand; }
                      (spisok_komand)

V pervom sluchae ukazannyj spisok_komand prosto  vypolnyaetsya.
Vo  vtorom - zadannyj spisok_komand tozhe vypolnyaetsya, no uzhe
kak otdel'nyj process.

     Naprimer, konstrukciya:

                       (cd x; rm junk)

vypolnyaet komandu rm junk v spravochnike x, ne izmenyaya  teku-
shchego spravochnika, a komandy

                     { cd x; rm junk; }

dayut tot zhe samyj  rezul'tat,  no  spravochnik  x  stanovitsya
tekushchim.

2.10.  Vstroennye komandy

     Kak pravilo, pri vypolnenii  kakoj-libo komandy interp-
retator porozhdaet otdel'nyj process.  Odnako, sushchestvuet ryad


                           - 12 -










funkcij, vypolnenie kotoryh v kachestve  otdel'nogo  processa
libo  neeffektivno, libo nevozmozhno.  Prezhde vsego eto otno-
sitsya k komandam, vypolnenie kotoryh  zavisit  ot  sostoyaniya
lokal'nyh peremennyh interpretatora.  Komandy, vypolnyayushchiesya
neposredstvenno interpretatorom (bez  porozhdeniya  processa),
nazyvayutsya  vstroennymi  komandami  yazyka.   S  tochki zreniya
pol'zovatelya vstroennye komandy prakticheski ne otlichayutsya po
svoim  svojstvam ot ostal'nyh komand sistemy, za isklyucheniem
togo, chto dlya nih obychno nel'zya  pereopredelit'  standartnye
fajly vvoda/vyvoda.

     Dalee privoditsya spisok  vstroennyh  komand  s  kratkim
opisaniem vypolnyaemyh funkcij:

:    |ta komanda  ne  vypolnyaet  nikakih  dejstvij,  ee  kod
     zaversheniya  raven nulyu. Tem ne menee proizvoditsya pods-
     tanovka znachenij makroperemennyh.

. fajl
     Schityvaet i vypolnyaet komandy iz fajla.  Dlya nahozhdeniya
     spravochnika,  soderzhashchego fajl, ispol'zuetsya makropere-
     mennaya PATH.

cd [spravochnik]
     Ob®yavit' ukazannyj spravochnik tekushchim.   Esli  parametr
     ne  zadan,  v  kachestve  imeni spravochnika ispol'zuetsya
     znachenie makroperemennoj HOME.   Sinonimom  komandy  cd
     yavlyaetsya komanda chdir.

eval [komanda ...]
     Vypolnyayutsya vse  makropodstanovki,  posle  chego,  slovo
     eval  otbrasyvaetsya  i ostal'nye simvoly obrabatyvayutsya
     kak obychnaya komandnaya stroka.

exec [komanda ...]
     Tekushchij process zameshchaetsya processom vypolnenya  ukazan-
     noj  komandy.   Dopuskaetsya pereopredelenie standartnyh
     fajlov vvoda/vyvoda.

exit [N]
     Preryvanie vypolnenie  tekushchego  processa.   Soobshchaetsya
     kod  zaversheniya  N.  Esli  parametr  N  otsutstvuet, to
     ispol'zuetsya  kod  zaversheniya   poslednej   vypolnennoj
     komandy.

export [imya ...]
     Perechislennye makroperemennye avtomaticheski vvodyatsya  v
     sredu porozhdaemyh processov.  Esli parametry ne zadany,
     vydaetsya spisok eksportiruemyh makroperemennyh.

login [parametr ...]
     Registraciya pol'zovatelya v sisteme bez sozdaniya  novogo
     processa (ekvivalent komandy exec login parametr ...).


                           - 13 -










newgrp [parametr ...]
     Zamena  tekushchego  identifikatora  gruppy  pol'zovatelej
     (ekvivalent komandy "exec newgrp parametr ...").

read imya ...
     Iz standartnogo fajla vvoda  schityvaetsya  odna  stroka.
     Zatem  makroperemennym imya ... posledovatel'no prisvai-
     vayutsya znacheniya slov,  sostavlyayushchih  etu  stroku.   Kod
     zaversheniya  komandy  raven  nulyu vo vseh sluchayah, krome
     teh, kogda spisok parametrov dlinnee, chem chislo slov  v
     schitannoj stroke.

readonly [imya ...]
     Zapreshchaetsya pereoprelenie  perechislennyh  makroperemen-
     nyh.   Esli  parametry  ne zadany, vydaetsya spisok vseh
     makroperemennyh, opredelennyh kak readonly (tol'ko  dlya
     chteniya).

set [-ekntuvx [parametr ...]]
     Ustanavlivaet rezhimy raboty interpretatora yazyka SHELL.
     Mogut zadavat'sya sleduyushchie klyuchi:

      -e  V neinteraktivnom rezhime vyzyvaet nemedlennoe pre-
          ryvanie processa pri obnaruzhenii oshibki v vypolne-
          nii komandy.

      -k  Vse opredelennye makroperemennye eksportiruyutsya  v
          sredu zapuskaemyh processov.

      -n  Proizvodit tol'ko sintaksicheskij kontrol' komand.

      -t  Preryvaet  vypolnenie  processa  posle  togo,  kak
          budet schitana i vypolnena odna komanda.

      -u  Ustanavlivaet rezhim diagnostiki oshibki pri popytke
          ispol'zovat' neopredelennye makroperemennye.

      -v  Ustanavlivaet rezhim pechati vvodimyh strok.

      -x  Raspechatyvaet  komandy  i  ih  parametry  po  mere
          vypolneniya.

      -   Otmenyaet klyuchi -v i -x.

     Ustanovlennye klyuchi  soderzhatsya  v  makroperemennoj  -.
     Ostal'nym parametram komandy set prisvaivayutsya znacheniya
     pozicionnyh parametrov "1, 2, ...".  Esli parametry  ne
     zadany,  pechataetsya  spisok znachenij vseh makroperemen-
     nyh.

shift
     Pozicionnym parametram "2, 3, ..." prisvaivayutsya znache-
     niya parametrov "1, 2, ..." sootvetstvenno.


                           - 14 -










times
     Vydaetsya vremya, zatrachennoe pol'zovatelem i sistemoj na
     vypolnenie processa.

trap [komanda] [N ...]
     Pri poluchenii perechislennyh signalov  vypolnyaetsya  uka-
     zannaya komanda.

umask [ddd]
     Pri formirovanii deskriptorov vnov' sozdavaemyh  fajlov
     priznaki razreshenie chteniya i razreshenie zapisi ustanav-
     livayutsya soglasno maske ddd.  Cifra '0' v sootvetstvuyu-
     shchem  razryade  oznachaet ustanovku priznaka. Format maski
     sovpadaet s formatom deskriptora, zadavaemym v  komande
     chmod.   Rassmatrivayutsya  tol'ko  te  pozicii,  kotorye
     opredelyayut razreshenie chteniya zapisi rw.  Esli  parametr
     otsutstvuet,  vydaetsya  tekushchee znachenie maski.  Napri-
     mer, komanda umask 000  ustanovit  rezhim,  pri  kotorom
     vsem  porozhdaemym fajlam budet ustanavlivat'sya priznaki
     razresheniya chteniya zapisi dlya vseh pol'zovatelej.

wait [N]
     Ozhidaet okonchaniya vypolneniya processa s nomerom  (N)  i
     prisvaivaet ego kod zaversheniya makroperemennoj ?.

3.  KOMANDNYE FAJLY

     Posledovatel'nost'  komand  mozhno  zapisat'  v  fajl  i
vypolnit', ukazav imya etogo fajla.  Takim obrazom, obespechi-
vaetsya vozmozhnost' sozdaniya dostatochno slozhnyh  programm  na
yazyke  SHELL.  V yazyke sushchestvuyut operatory upravleniya (ope-
rator cikla, uslovnogo perehoda, vybora) i apparat  peredachi
parametrov.

     Vypolnenie komandnogo fajla mozhet osushchestvlyat'sya  dvumya
sposobami.   V pervom sluchae, ukazyvaetsya imya interpretatora
yazyka SHELL - sh, rezhimy ego raboty, imya i parametry komand-
nogo  fajla.  Vo vtorom - tol'ko imya fajla i parametry (ana-
logichno vyzovu lyuboj komandy sistemy).  Pri etom predpolaga-
etsya, chto fajl imeet priznak "vypolnenie razresheno".

     Rezul'tat raboty  komandy  ne  zavisit  ot  sposoba  ee
vypolneniya,  poetomu, kak pravilo, ispol'zuetsya vtoroj vari-
ant.  Zapusk komandy s yavnym ukazaniem imeni  interpretatora
chasto  primenyaetsya dlya otladki komandnyh fajlov, kogda neob-
hodimo zadavat' razlichnye rezhimy raboty sh.

     Naprimer, komanda:

                     sh file [parametry]

vyzyvaet interpretator dlya vypolneniya komand iz fajla  file.
Esli  v  komandnoj  stroke  zadany parametry, oni peredayutsya


                           - 15 -










porozhdaemomu processu v vide znachenij  makroperemennyh  "1",
"2" i t.d.

     Naprimer, esli fajl wg soderzhit stroku:

                        who | grep $1

to komanda

                         sh wg nata

vypolnyaet dejstvie ekvivalentnoe

                       who | grep nata


     Priznak togo, chto fajl mozhno vypolnyat' obychno  ustanav-
livaet  komponenta, sozdavshaya dannyj fajl (naprimer kompilya-
tor). Komandnye fajly, kak  pravilo,  sozdayutsya  neposredst-
venno pol'zovatelem i dannogo priznaka ne soderzhat.  Poetomu
voznikaet neobhodimost' ustanovit' dlya fajla priznak  vypol-
nenie razresheno. Dlya etogo mozhno ispol'zovat' komandu chmod.
Naprimer, v rezul'tate raboty komandy:

                         chmod +h wg

fajl wg poluchaet priznak vypolnenie razresheno.

     Obrabotka parametrov pri zapuske komandy vypolnyaetsya po
sleduyushchim pravilam:

-    Obrabatyvayutsya vse imeyushchiesya metasimvoly yazyka.

-    Komandnaya stroka razbivaetsya na slova -  posledovatel'-
     nosti  simvolov, ne soderzhashchie simvolov-razdelitelej, k
     kotorym otnosyatsya probel, simvol nachala stroki  i  znak
     tabulyacii.   Esli  v kachestve parametra trebuetsya pere-
     dat' tekst, kotoryj  soderzhit  probely,  on  beretsya  v
     kavychki.

-    Vydelennye slova posledovatel'no prisvaivayutsya makrope-
     remennym s imenami "0", "1", "2", i t.d.

-    V kachestve znacheniya makroperemennoj "#" ustanavlivaetsya
     chislo parametrov.

-    Znacheniya  vseh  parametrov  (za  isklyucheniem  nulevogo)
     prisvaivayutsya  makroperemenoj  *.   T.e.  makrovyzov $*
     budet zamenyat'sya na stroku,  soderzhashchuyu  znacheniya  vseh
     parametrov.

     Naprimer, esli komandnyj fajl show imeet vid:



                           - 16 -










           echo '
           Komanda  $0 =' $0 '
           Znachenie $1 =' $1 '
           Znachenie $2 =' $2 '
           CHislo parametrov =' $# '
           Znachenie $* =' $*

to v rezul'tate vypolneniya komandy:

                     show pervyj vtoroj

budet poluchen sleduyushchij tekst:

           Komanda  $0 = show
           Znachenie $1 = pervyj
           Znachenie $2 = vtoroj
           CHislo parametrov = 2
           Znachenie $* = pervyj vtoroj


3.1.  Kommentarii
V komandnoj stroke yazyka SHELL mozhno ispol'zovat'  kommenta-
rij,  kotoryj sluzhit dlya uluchsheniya chitaemosti komandnyh faj-
lov.  Kommentarij dolzhen nachinat'sya simvolom  #  i  raspola-
gat'sya v konce komandnoj stroki.  Tak kak chast' stroki, sle-
duyushchaya za simvolom #, ne rassmatrivaetsya interpretatorom,  v
nej mogut vstrechat'sya lyubye simvoly.

     Naprimer:

     #   |to   primer   kommentariya
     ls    #  Budet vypolnena komanda
           #  ls (eto tozhe kommentarij)

Sleduet pomnit', chto esli # yavlyaetsya pervym  simvolom fajla,
emu  pridaetsya  osobyj  smysl - eto priznak togo, chto dolzhen
ispol'zovat'sya interpretator yazyka csh.

3.2.  Komanda test

     Komanda test, hotya i  ne  yavlyaetsya  konstrukciej  yazyka
SHELL,  neobhodima pri sozdanii komandnyh fajlov.  V rezul'-
tate vypolneniya komandy  osushchestvlyaetsya  proverka  zadannogo
usloviya  i  soobshchaetsya  kod  ee  zaversheniya,  kotoryj  mozhet
ispol'zovat'sya v operatorah uslovnogo perehoda i cikla.

     Naprimer, kod zaversheniya komandy

                        test -f file

raven nulyu, esli fajl file sushchestvuet, i ne raven nulyu  -  v
protivnom sluchae.



                           - 17 -










     Osnovnye vozmozhnosti komandy mozhno proillyustrirovat' na
sleduyushchih primerah:

test s
     istinno, esli argument s ne yavlyaetsya pustoj strokoj;

test -f file
     istinno, esli fajl sushchestvuet;

test -r file
     istinno, esli fajl mozhno chitat';

test -w file
     istinno, esli v fajl mozhno pisat';

test -d file
     istinno, esli fajl yavlyaetsya spravochnikom.

3.3.  Operator for

     V yazyke SHELL sushchestvuet vozmozhnost'  posledovatel'nogo
povtoreniya  kakoj-libo  gruppy  komand  dlya kazhdogo elementa
ukazannogo spiska.   Dlya  etoj  celi  ispol'zuetsya  operator
cikla for, kotoryj imeet sleduyushchij format:

       for imya [in slovo1 slovo2 ...]
          do spisok_komand
          done

gde spisok_komand - eto posledovatel'nost'  odnoj  ili  nes-
kol'kih prostyh komand, razdelennyh simvolami ; ili perechis-
lennyh na raznyh strokah.  Zarezervirovannye slova do i done
raspoznayutsya tol'ko v tom sluchae, esli oni sleduyut za simvo-
lom novoj stroki ili tochki s zapyatoj. Imya -  eto  makropere-
mennaya   yazyka   SHELL,   kotoraya   v   processe  vypolneniya
spiska_komand  posledovatel'no  prinimaet  znacheniya   slovo1
slovo2  ....  Esli konstrukciya in slovo1 slovo2 ... otsutst-
vuet, to cikl vypolnyaetsya odin  raz  dlya  kazhdogo  zadannogo
parametra  (t.e.  po  umolchaniyu  predpolagaetsya  in  $*).  V
kachestve primera mozhno privesti komandu tel,  kotoraya  pros-
matrivaet fajl /usr/lib/pfone, soderzhashchij stroki vida:

             ...
             Ivanov I.I.   224 01 01
             Petrov P.P.   123 07 07
             Sizov  V.I.   224 44 94
             ...


     Tekst procedury tel:

          for i
          do grep $i usr/lib/pfone; done


                           - 18 -










     V rezul'tate vypolneniya komandy:

                         tel Petrov

budut napechatany te  stroki  fajla  /usr/lib/pfone,  kotorye
soderzhat posledovatel'nost' simvolov Petrov, a komanda:

                      tel Ivanov Petrov

napechataet  snachala  stroki,  soderzhashchie  posledovatel'nost'
simvolov Ivanov, a zatem te stroki, kotorye soderzhat simvoly
Petrov.

     Eshche odnim primerom  ispol'zovaniya  cikla  for  yavlyaetsya
komandnyj fajl create:

                     for i do >&gt; $i; done

Rezul'tatom vypolneniya komandy

                      create alpha beta

yavlyaetsya sozdanie dvuh pustyh fajlov alpha i beta.

3.4.  Operator case

     Rassmotrim  v  kachestve  primera  komandnyj  fajl  add,
soderzhashchij sleduyushchij tekst:

     case $# in
          1) cat >&gt;>&gt; $1;;
          2) cat >&gt;>&gt; $2 <&lt; $1;;
          *) echo 'Format: add [otkuda] kuda';;
     esac

Pri vyzove komandy s odnim argumentom, naprimer:

                          add file

parametr $# poluchaet znachenie '1', i  komanda  cat  kopiruet
informaciyu  iz  standartnogo fajla vvoda v konec fajla file.
Komanda:

                       add file1 file2

dopishet soderzhimoe fajla file1 v konec  fajla  file2.   Esli
chislo  parametrov,  peredavaemyh komande add, otlichno ot 1 i
ot 2, to pechataetsya soobshchenie "Format: add kuda [otkuda]".

     Format operatora case:





                           - 19 -










    case slovo in
     [obrazec[|obrazec] ...) spisok_komand;;]
     ...
     [obrazec[|obrazec] ...) spisok_komand[;;]]
    esac


     Interpretator posledovatel'no sravnivaet slovo s kazhdym
iz ukazannyh obrazcov. Pri obnaruzhenii sootvetstviya vypolnya-
etsya zapisannyj pri obrazce spisok_komand, posle chego, obra-
botka  operatora  zavershaetsya.   Simvol * predstavlyaet soboj
obrazec,  kotoryj  sootvetstvuet   lyuboj   stroke.    Kazhdyj
spisok_komand  (za isklyucheniem poslednego) neobhodimo zaver-
shat' simvolami ;;.

     Pervoe zhe sovpadenie slova s obrazcom polnost'yu oprede-
lyaet  mnozhestvo  vypolnyaemyh  komand.  V  sleduyushchem  primere
komandy, ukazannye za vtorym simvolom  *,  ne  budut  vypol-
nyat'sya nikogda:

         case $# in
              *) ...;;
              *) ...;;
         esac


     Operator case chasto ispol'zuetsya dlya proverki  korrekt-
nosti parametrov. |to mozhno proillyustrirovt' sleduyushchim frag-
mentom komandy cc:

    for i
     do case $i in
       -[ocs]) ...;;
           -*) echo 'neizvestnyj klyuch $i';;
          *.c) lib/c0 $i ...;;
            *) echo 'neizvestnyj parametr $i';;
        esac
    done


     Esli  usloviem  vypolneniya  kakogo-libo   spiska_komand
yavlyaetsya  gruppa  obrazcov, to pri ih perechislenii v komande
case v kachestve razdelitelya  ispol'zuetsya  simvol  |.   Tak,
operator:

         case $i in
            -h) echo $i
            -y) echo $i
         esac

mozhet byt' zapisan sluduyushchim obrazom:




                           - 20 -










         case $i in
            -h|-y) echo $i
         esac


     Pri poiske sootvetstvuyushchego obrazca primenimy  osnovnye
soglasheniya ob otmene special'nogo znacheniya metasimvolov, tak
obrazec v konstrukcii:

         case $i in
            ?) ...

budet sootvetstvovat' simvolu ?.

3.5.  Operatory while i until

     Operator while  prednaznachen  dlya  organizacii  ciklov,
vypolnenie  kotoryh proizvoditsya do teh por, poka kod zaver-
sheniya ukazannogo spiska komand raven nulyu.

     Obshchaya forma operatora while:

           while spisok_komand_1
           [do spisok_komand_2]
           done


     V kazhdom cikle vypolnyayutsya komandy iz  spiska_komand_1.
Operator  while  proveryaet  kod zaversheniya poslednej prostoj
komandy iz etogo spiska: esli  on  raven  nulyu,  vypolnyaetsya
spisok_komand_2 i cikl povtoryaetsya, inache - vypolnenie cikla
zavershaetsya.

     Naprimer, pri vypolneniya sleduyushchih operatorov:

           while test $1
           do ...
              shift
           done

i

           for i
           do ...
           done

budet poluchen odinakovyj rezul'tat.

     Operator shift  pereimenovyvaet  pozicionnye  parametry
"2, 3, ..." v parametry "1, 2, ..." sootvetstvenno; znachenie
parametra "1" teryaetsya.




                           - 21 -










     Drugim sposobom organizacii cikla yavlyaetsya  ispol'zova-
nie operatora until:

           until spisok_komand_1
           [do spisok_komand_2]
           done

V otlichie ot while cikl until budet vypolnyat'sya do teh  por,
poka  kod  zaversheniya  poslednej  komandy spiska_komand_1 ne
budet imet' nulevoe znachenie.

3.6.  Operatory break i continue

     Operatory break i continue ispol'zuyutsya v  konstrukciyah
for, while i until.

     Operator break preryvaet rabotu cikla, v tele  kotorogo
on  vypolnyaetsya.   V  kachestve  primera mozhno privesti prog-
rammu, kotoraya vydaet znacheniya svoih parametrov, raspolozhen-
nyh do simvola %:

    for i
    do
    case $i in
      %) break;;
      *) echo $i;;
    esac
    done


     Operator continue osushchestvlyaet perehod k sleduyushchej ite-
racii cikla.  Dlya primera rassmotrim komandnyj fajl, kotoryj
vyvodit tol'ko te parametry, kotorye nachinayutsya s bukvy:

     for i
     do
       case $i in
            [A-YAa-ya]*) echo $i;;
            [A-Za-z]*) echo $i;;
                    *) continue;;
       esac
     done


3.7.  Operator if

     Uslovnyj operator vida:

            if  spisok_komand_1
            then spisok_komand_2
            [else spisok_komand_3]
            fi



                           - 22 -










proveryaet   kod   zaversheniya   poslednej   prostoj   komandy
spiska_komand_1:    esli    on   raven   nulyu,   vypolnyaetsya
spisok_komand_2, inache - spisok_komand_3.

     Komanda if mozhet ispol'zovat'sya  sovmestno  s  komandoj
test, naprimer, dlya proverki sushchestvovaniya fajla:

           if test -f $1
           then  echo "FAJL $1 SUSHCHESTVUET"
           else  echo "FAJL $1 NE SUSHCHESTVUET"
           fi


     Pri mnogokratnom povtorenii uslovnogo operatora, napri-
mer:

            if ...
            then    ...
            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:


        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 -




Last-modified: Mon, 29 Jun 1998 14:15:05 GMT
Ocenite etot tekst: