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

                          C-shell














                           Moskva

                            1988















                        ANNOTACIYA

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





























































1.  Komandnyj yazyk C-shell

     Vzaimodejstvie pol'zovatelya i operacionnoj sistemy osu-
shchestvlyaet interpretator komand - programma svyazi mezhdu pol'-
zovatelem i operacionnoj sistemoj.  Osnovnaya funkciya interp-
retatora  -  sozdanie processov, vypolnyayushchih zadanie (odnu i
bolee komand) pol'zovatelya, sformulirovannoe v vide  predlo-
zhenij  (komandnyh strok) nekotorogo formalizovannogo yazyka -
yazyka vzaimodejstviya s  operacionnoj  sistemoj.  Takoj  yazyk
nazyvayut komandnym.

     Komandnyj yazyk pozvolyaet  vypolnyat'  razlichnye  zadaniya
pol'zovatelya   i  upravlyat'  rabotoj  operacionnoj  sistemy.
Pol'zovateli   DEMOS    ispol'zuyut   neskol'ko   standartnyh
komandnyh  yazykov, odnako avtory reshili ogranichit'sya podrob-
nym opisaniem naibolee razvitogo  i  populyarnogo  iz  nih  -
komandnogo yazyka C-shell [].

     C-shell - yazyk upravleniya zadaniyami so svojstvami  uni-
versal'nogo   yazyka  programmirovaniya.   Sovmeshchenie  svojstv
yazyka upravleniya zadaniyami i universal'nogo yazyka programmi-
rovaniya delaet C-shell vo mnogom shozhim kak s universal'nymi
algoritmicheskimi yazykami, tak i s naibolee razvitymi komand-
nymi  yazykami.  |to otrazheno v samom nazvanii yazyka C-shell:
C - ot imeni  universal'nogo  yazyka  programmirovaniya  Si  i
shell  -  yazyk  vzaimodejstviya pol'zovatelya s sistemoj (buk-
val'no "obolochka").  V kachestve programmy svyazi mezhdu  pol'-
zovatelem i operacionnoj sistemoj ispol'zuetsya interpretator
csh, prednaznachennyj dlya razbora i vypolneniya predlozhenij na
yazyke  C-shell.   Interpretator csh rabotaet v dvuh rezhimah:
interaktivnom i neinteraktivnom.

     V interaktivnom rezhime pol'zovatel' formuliruet zadanie
obychno v vide odnoj komandnoj stroki, posle vypolneniya koto-
rogo  formuliruetsya  sleduyushchee,  v  vide  drugoj   komandnoj
stroki.  V etom rezhime mozhno vypolnyat' zadanie iz neskol'kih
komandnyh strok, obrazuyushchih fragment programmy ili vsyu prog-
rammu  celikom.  Takaya  programma  mozhet  soderzhat' uslovnye
vyrazheniya i cikly.

     V neinteraktivnom  rezhime  vypolnyaetsya  komandnyj  fajl
(programma na yazyke C-shell), v kotorom soderzhatsya komandnye
stroki i upravlyayushchie konstrukcii (operatory yazyka C-shell).

1.1.  Leksicheskaya struktura yazyka C-shell

     Predlozhenie  na  yazyke  C-shell  formuliruetsya  v  vide
komandnoj  stroki,  kotoraya  mozhet  soderzhat'  komandu DEMOS
(naprimer, /bin/cat), vnutrennyuyu komandu interpretatora  csh
(naprimer,  cd),  operator  yazyka  programmirovaniya  C-shell
(naprimer, operator cikla while).




                           - 3 -










     Komandnaya stroka sostoit iz spiska slov i ih razdelite-
lej.   Slovo  mozhet vklyuchat' imya peremennoj, fajla, metasim-
voly i konstrukcii iz nih. Interpretaciya  slova  mozhet  pri-
vesti  k  tomu,  chto slovo budet zameneno spiskom slov, t.e.
strokoj.  V chislo peremennyh mogut vhodit' peremennye, opre-
delennye  programmistom, tak nazyvaemye peremennye okruzheniya
(s nimi my poznakomimsya nizhe), i predopredelennye peremennye
interpretatora  csh.  V obshchem sluchae interpretator csh vyde-
lyaet sleduyushchie leksemy v komandnoj stroke:  slovo,  razdeli-
tel' slov i metasimvol.

     Slovo - eto zavershennaya konstrukciya, kotoruyu raspoznaet
interpretator  csh.   Razdelitelyami  slov v komandnoj stroke
mogut byt' probely, tabulyacii i perechislennye nizhe simvoly:

      ;    (    )    <&lt;    >&gt;    &    |

Esli neobhodimo ispol'zovat' eti simvoly  v  kachestve  chasti
slova, a ne razdelitelya, to primenyaetsya ekranirovanie simvo-
lom \. Naprimer, esli simvolu ; predshestvuet  simvol  \,  on
budet vosprinimat'sya ne kak razdelitel' gruppy komand, a kak
simvol ';' slova,  kotoromu  prinadlezhit.   Nekotoraya  chast'
simvolov obrazuet klass tak nazyvaemyh metasimvolov - simvo-
lov, imeyushchih special'noe znachenie.  Kazhdyj iz  perechislennyh
nizhe  simvolov  imeet  special'noe znachenie v yazyke C-shell.
Special'noe znachenie simvola opredelyaetsya  kontekstom  slova
ili komandnoj stroki

      !    #    $    %   :    *    ,    ?

      [    ]    {    }   @    ~    .    ^

Simvol \ otmenyaet special'noe znachenie chasti ukazannyh meta-
simvolov.

     Posle razbora komandnoj stroki i  podstanovki  znachenij
peremennyh  slovo mozhet "prevratit'sya" v stroku ili ostat'sya
slovom, naprimer imenem fajla.  Interpretator csh  pozvolyaet
operirovat' strokami, poluchennymi v rezul'tate interpretacii
slov v komandnoj stroke, osushchestvlyat' razlichnye preobrazova-
niya:

             "stroka"    'stroka'    `stroka`

Kavychki ispol'zuyutsya dlya upravleniya rezhimom  grammaticheskogo
razbora i interpretacii komandnoj stroki.  Dvojnye i odinar-
nye kavychki mozhno ekranirovat' simvolom \.   Esli  komandnaya
stroka  zanimaet  bolee odnoj stroki, to ee mozhno prodolzhit'
na sleduyushchej, postaviv v konce simvol \.

     Stroka, zaklyuchennaya v dvojnye kavychki, interpretiruetsya
csh,  v nej ispol'zuyutsya special'nye znacheniya metasimvolov i
vypolnyayutsya podstanovki znachenij peremennyh.


                           - 4 -










     Stroka, zaklyuchennaya v odinarnye pravye kavychki  (apost-
rofy),  ne interpretiruetsya. Vse metasimvoly i ih posledova-
tel'nosti teryayut svoe special'noe znachenie. V nekotoryh slu-
chayah simvoly

      ?   .   *   !   ~

sohranyayut svoe special'noe  znachenie  i  interpretiruyutsya  v
takoj stroke.

     Stroka, zaklyuchennaya v levye odinarnye kavychki,  interp-
retiruetsya kak komandnaya stroka. |ta komandnaya stroka vypol-
nyaetsya i zamenyaetsya rezul'tatom ee vypolneniya.

     Nizhe perechisleny leksemy - imena  operatorov  yazyka  C-
shell i vnutrennih komand interpretatora csh:

     alias      endsw      logout     suspend
     alloc      eval       newgrp     switch
     bg         exec       nice       time
     break      exit       nohup      umask
     breaksw    fg         notify     unalias
     case       foreach    onintr     unhash
     cd         glob       popd       unlimit
     chdir      goto       pushd      unset
     continue   hashstat   rehash     unsetenv
     default    history    repeat     wait
     dirs       if         set        while
     echo       jobs       setenv
     else       kill       shift
     end        limit      source
     endif      login      stop

Imena predopredelennyh vnutrennih peremennyh  interpretatora
csh:

     argv       history    nonomatch  status
     cdpath     home       notify     time
     checktime  ignoreeof  path       verbose
     child      mail       prompt
     cwd        noclobber  savehist
     echo       noglob     shell

V nekotoryh sluchayah odna leksema opredelyaet i  imya  peremen-
noj,  i imya vnutrennej komandy interpretatora csh.  Tip lek-
semy opredelyaetsya po kontekstu.  Naprimer, komanda time hro-
nometriruet vypolnenie prostoj komandnoj stroki, a predopre-
delennaya peremennaya s imenem time ispol'zuetsya dlya  ukazaniya
interpretatoru,  o kakih zadaniyah vyvodit' rezul'taty hrono-
metrirovaniya.





                           - 5 -










1.2.  Formaty komandnyh strok, peremeshcheniya po fajlovoj  sis-
teme

     Interpretator csh poluchaet  zadanie  v  vide  komandnoj
stroki ili komandnogo fajla.  Posledovatel'nost' simvolov ot
priglasheniya do simvola perevod stroki (\n) yavlyaetsya  komand-
noj   strokoj.   Komandnaya  stroka  mozhet  vklyuchat'  prostuyu
komandu, posledovatel'nost' komand, gruppu komand, konvejer.
Zadanie mozhet vypolnyat'sya v sinhronnom ili asinhronnom rezhi-
mah. V rezul'tate razbora komandnoj stroki interpretator csh
zapuskaet na vypolnenie odin ili bolee processov.

     Komandoj my  nazyvaem  lyuboj  ob®ektnyj  ili  komandnyj
fajl,  kotoryj  mozhet  byt'  vypolnen pod upravleniem DEMOS.
Naprimer, komanda

            pr -2 -w39 -l24 -t file

vyvedet  na  ekran  displeya  soderzhimoe  fajla  file  v  dve
kolonki,  strokami po 39 simvolov i stranicami po 24 stroki.
Komanda pr (ob®ektnyj vypolnyaemyj fajl  kotoroj  razmeshchen  v
kataloge  /bin)  vypolnyaet  sobstvenno  formatirovanie pered
vyvodom fajla. Rezhimy raboty komandy pr zadayutsya klyuchami, im
v  komandnoj  stroke predshestvuyut znaki minus ili plyus. Znak
ispol'zuetsya, chtoby mozhno bylo klyuch otlichit' ot imeni fajla.
Krome togo, v komandnoj stroke ukazano imya fajla file, koto-
ryj neobhodimo obrabotat' komande pr.  Prezhde chem komanda pr
nachnet vypolnyat'sya, interpretator vypolnit sleduyushchuyu rabotu:

     proanaliziruet oshibki v komandnoj stroke;


     najdet vypolnyaemyj fajl v odnom iz katalogov (v  dannom
     sluchae - v /bin);


     peredast ego na vypolnenie operacionnoj sisteme  vmeste
     s klyuchami i imenem fajla.


     Po zaversheniyu vypolneniya komandnoj stroki interpretator
csh  napechataet  priglashenie (forma priglasheniya ustanavliva-
etsya pol'zovatelem).  |to znachit, chto mozhno vvodit'  sleduyu-
shchuyu komandnuyu stroku.  Komandnaya stroka ob®edinyaet neskol'ko
slov, razdelennyh probelami, pervoe iz kotoryh - sobstvennoe
imya komandy.

     CHasto byvaet  neobhodimo  vypolnit'  posledovatel'nost'
komand, v etom sluchae mozhno ispol'zovat' simvol ;, naprimer:

    cat <&lt; file ; pr -2 -w39 -l24 -t file

|ta komandnaya stroka  privodit  k  vypolneniyu  dvuh  komand:


                           - 6 -










snachala  file budet vyveden na displej takim, kakoj on est',
zatem komandoj pr so vsemi ukazannymi preobrazovaniyami.

     Dlya upravleniya posledovatel'nostyami komand  dopuskaetsya
ispol'zovanie logicheskih svyazok && i ||, naprimer:

    cat <&lt; file && pr -2 -w39 -l24 -t file

V etom sluchae vtoraya komanda vypolnitsya, esli uspeshno vypol-
nitsya  pervaya,  t.e.  esli  file  sushchestvuet i ego razresheno
chitat'.

    cat <&lt; file1 || pr -2 -w79 -l24 -t file

I v etom sluchae vtoraya komanda budet  vypolnena,  dazhe  esli
pervaya  ne  vypolnitsya,  naprimer  esli  file1  otsutstvuet.
Slova uspeshno vypolnitsya imeyut opredelennyj smysl  -  zaver-
shivshijsya process dolzhen vernut' kod zaversheniya, ravnyj nulyu.
V nekotoryh versiyah komand kod normal'nogo  zaversheniya  pro-
cessa ne raven nulyu.

     Dlya gruppirovaniya komand ispol'zuyutsya  kruglye  skobki.
Gruppa  komand, zaklyuchennaya v skobki, vypolnyaetsya kak samos-
toyatel'naya komandnaya stroka i ne vliyaet na vnutrennie  pere-
mennye drugih chastej komandnoj stroki, naprimer:

    ls -l; ( cat <&lt; f1 && cat <&lt; f2 ) && date

Snachala vydaetsya listing rabochego kataloga,  zatem  vypolnya-
etsya  gruppa komand v skobkah i, esli oba fajla sushchestvuyut i
razresheno ih chtenie, vypolnyaetsya komanda date.  Dlya  bezoshi-
bochnogo  razbora komandnoj stroki interpretatorom csh trebu-
etsya, chtoby okolo skobok nahodilis' libo ;, libo &&, libo |,
libo ||, libo metasimvoly perenapravleniya vvoda-vyvoda.

     Kogda byvaet neobhodimo  organizovat'  posledovatel'nuyu
obrabotku  potoka dannyh, ispol'zuyutsya mezhprocessnye kanaly.
Odin process vyvodit potok dannyh v kanal, drugoj chitaet  iz
nego. Esli neobhodimo rasshirit' chislo vzaimodejstvuyushchih pro-
cessov, to obrazuetsya konvejer  komand.  Dlya  oboznacheniya  v
komandnoj  stroke  mezhprocessnogo  kanala  vydelen simvol |,
naprimer:

    cat -n <&lt; file | pr -2 -w39 -l24 -t

Komanda cat prostavlyaet nomera strok v file (klyuch n),  i  ee
vyvod  peredaetsya  komande  pr dlya formatirovaniya. Rezul'tat
vyvoditsya na ekran displeya.

    sort file | cat -n | pr -2 -w39 -l24 >&gt;>&gt; file2

Komanda sort sortiruet fajl; cat - prostavlyaet nomera strok;
pr  - formatiruet vyvod i dopisyvaet ego v file2.  Komandy v


                           - 7 -










konvejere mozhno razdelyat' s pomoshch'yu logicheskih svyazok  &&  i
||, gruppirovat' kruglymi skobkami, razdelyat' ;, naprimer:

    ( cat <&lt; f1 && date ) && ( cat -n <&lt; f1 | sort ); date

Esli imeetsya fajl f1, on vyvoditsya na displej,  zatem  vyvo-
ditsya  data,  a komanda cat, pronumerovav stroki, napravlyaet
fajl na sortirovku.  Na ekran vyvodyatsya rezul'tat sortirovki
i  data. Esli f1 otsutstvuet ili ego nel'zya chitat', to vyvo-
ditsya tol'ko data.

     Interpretator pozvolyaet perejti k priemu novoj  komand-
noj  stroki, ne dozhidayas' zaversheniya predydushchej. Takoj rezhim
vypolneniya nazyvayut asinhronnym ili parallel'nym.  |to  daet
vozmozhnost'  pol'zovatelyu  zapustit' na vypolnenie neskol'ko
komandnyh strok i prodolzhat' rabotu v interaktivnom  rezhime.
Simvol  & v konce komandnoj stroki ispol'zuyut, kogda neobho-
dimo vypolnit' ee asinhronno, naprimer:

    cat -n <&lt; f1 | pr -2 -w39 -l24 -t >&gt; f2 &

Komanda cat vyvodit stroki s nomerami, komanda  pr  formati-
ruet ih, vyvod napravlyaetsya v f2.

     CHasto pri nabore  komandnoj  stroki  voznikayut  oshibki,
kotorye mozhno ispravit' prostymi sredstvami.

     Klavisha ZB (DEL) displeya ispol'zuetsya dlya udaleniya sim-
vola, okolo kotorogo nahoditsya kursor.

     Simvol SU/W (CTRL/W) pozvolyaet udalit' poslednee  slovo
komandnoj stroki.

     Simvol SU/U (CTRL/U) pozvolyaet udalit' vsyu stroku.

     Peremeshcheniya po fajlovoj sisteme  vypolnyayutsya  komandami
cd,  popd i pushd.  Interpretator hranit put' ot registraci-
onnogo k rabochemu katalogu (ego imya hranitsya  v  predoprede-
lennoj peremennoj cwd), a takzhe podderzhivaet stek katalogov,
soderzhimoe kotorogo  vyvoditsya  po  komande  dirs.   Komandy
pushd  i popd ispol'zuyutsya dlya perehodov po derevu katalogov
fajlovoj sistemy i modifikacii soderzhimogo steka  katalogov.
Komanda  cd ne menyaet soderzhimogo steka katalogov.  |lementy
steka numeruyutsya ot 1, nachinaya ot vershiny steka.

     Komanda popd  bez  argumentov  ravnosil'na  komande  cd
imya_nomer_2  steka imen katalogov, t.e. osushchestvlyaetsya pere-
hod v novyj katalog,  imya  kotorogo  opredelyaetsya  avtomati-
cheski.   Imya_nomer_1  iz  steka  imen  katalogov  udalyaetsya,
ostal'nye elementy  steka  sohranyayutsya  s  novymi  nomerami.
Komanda  popd  +chislo  udalyaet imya_nomer_(1+chislo) iz steka,
ostal'nye elementy steka sohranyayutsya s novymi nomerami.  Pri
etom perehod v drugoj katalog ne osushchestvlyaetsya.


                           - 8 -










     Komanda pushd menyaet poryadok imen v steke imen  katalo-
gov i uvelichivaet ih chislo na 1.  Komanda pushd bez argumen-
tov ravnosil'na komande  cd  imya_nomer_2  steka.   Pri  etom
imya_s_nomerom_2  stavitsya  v vershinu, a imya_s_nomerom_1 - na
ego mesto v steke  (ostal'nye  elementy  steka  ostayutsya  na
svoih mestah).  Komanda pushd katalog ravnosil'na komande cd
katalog, pri etom  katalog  zapisyvaetsya  v  vershinu  steka,
ostal'nye  elementy  steka  sohranyayutsya  s  novymi nomerami.
Komanda    pushd    +chislo    ravnosil'na     komande     cd
imya_s_nomerom_(1+chislo).   Pri  etom imya_s_nomerom_(1+chislo)
stavitsya v vershinu steka,  a  chislo  imen  perepisyvaetsya  v
konec  steka  v tom poryadke, v kotorom oni sledovali ot ver-
shiny steka. Drugie elementy steka ostayutsya bez izmenenij.

1.3.  Upravlenie vvodom i vyvodom

     V DEMOS ispol'zuyutsya tak nazyvaemye  standartnyj  vvod,
standartnyj  vyvod i standartnyj vyvod diagnosticheskih soob-
shchenij.  Standartnyj  vvod  opredelyaet  istochnik  dannyh  dlya
komandy,  standartnyj  vyvod  - priemnik dannyh, standartnyj
vyvod diagnosticheskih  soobshchenij  -  priemnik  soobshchenij  ob
oshibkah.

     Sushchestvuyut dva rezhima upravleniya vvodom i vyvodom: per-
vyj  -  rezhim  umolchaniya;  vtoroj  - rezhim s yavnym ukazaniem
istochnika i/ili priemnika  dannyh.   V  rezhime  umolchaniya  v
kachestve standartnogo vvoda (istochnika) ispol'zuetsya klavia-
tura displeya, v kachestve standartnogo vyvoda i  standartnogo
vyvoda  oshibok  (priemniki)  - ekran displeya.  Interpretator
pozvolyaet menyat'  (pereadresovyvat')  istochnik  i  priemniki
dannyh.  Pereadresaciya osushchestvlyaetsya s pomoshch'yu razdelitelej
special'nogo vida.  Dlya ukazaniya napravleniya  vvoda  (istoch-
nika) ispol'zuyutsya sleduyushchie razdeliteli:

             <&lt;,    <&lt;<&lt;,    <&lt;<&lt; slovo

Esli razdelitel' ne ukazan, vvod osushchestvlyaetsya s klaviatury
displeya (standartnyj vvod).

     Dlya ukazaniya napravleniya vyvoda  (priemnika)  ispol'zu-
yutsya sleduyushchie razdeliteli:

             >&gt;       >&gt;>&gt;       |
             >&gt;&      >&gt;>&gt;&      |&
             >&gt;!      >&gt;>&gt;!
             >&gt;&!     >&gt;>&gt;&!

Esli razdelitel' ne ukazan, vyvod  osushchestvlyaetsya  na  ekran
displeya (standartnyj vyvod i standartnyj vyvod oshibok).

     Metasimvol & ispol'zuetsya, kogda  neobhodimo  soobshcheniya
ob  oshibkah  vyvodit' vmeste so standartnym vyvodom, a ne na
ekran.  Metasimvol ! ispol'zuetsya, kogda neobhodimo vremenno


                           - 9 -










otmenit' dejstvie nekotoryh klyuchej.

     Dlya upravleniya rezhimami vvoda-vyvoda ispol'zuyutsya  zna-
cheniya klyuchej noclobber, noglob i nonomatch. Esli klyuchi usta-
novleny, to vypolnyaetsya  osobyj  rezhim  vypolneniya  operacij
vvoda-vyvoda.  Ustanovku i otmenu klyuchej vypolnyayut s pomoshch'yu
komand set i unset.  Naprimer:

            set noclobber   ili   unset noclobber


     Rassmotrim podrobnee upravlenie vvodom:

<&lt; imya_fajla
     otkryvaetsya fajl, kotoryj chitaetsya vmesto chteniya s kla-
     viatury displeya;

<&lt;<&lt; slovo
     v kachestve vvoda ispol'zuetsya vvod s  klaviatury  disp-
     leya.   Vvod  prekrashchaetsya, kogda vvedennaya stroka budet
     identichna slovu. Naprimer:

                 cat >&gt; file <&lt;<&lt; mmm
                 0123
                 3456
                 6789
                 mmm

     Komanda cat sozdaet file  i  zhdet  vvoda  s  klaviatury
     displeya.  Kazhdaya  vvedennaya  stroka sravnivaetsya s mmm.
     Esli ona otlichaetsya ot mmm,  to  zapisyvaetsya  v  file.
     Esli ona identichna mmm, vvod prekrashchaetsya i file zakry-
     vaetsya.  Stroka mmm v vyhodnoj fajl ne vvoditsya.   Ana-
     logichnuyu  konstrukciyu  mozhno  ispol'zovat'  v komandnom
     fajle.


     Rassmotrim podrobnee upravlenie vyvodom:

>&gt; imya_fajla
     rezul'tat napravlyaetsya v ukazannyj fajl.

>&gt;! imya_fajla
     vosklicatel'nyj znak otmenyaet dejstvie klyucha noclobber.
     Klyuch  zapreshchaet  vyvod  v fajl, esli on k etomu momentu
     sushchestvuet i ne yavlyaetsya special'nym fajlom  (naprimer,
     /dev/tty*).   Dopustim, sushchestvuyut fajly s imenem file1
     i file2 i vypolnena komanda

         set noclobber

     Togda komanda



                           - 10 -










         cat <&lt; file2 >&gt; file1

     ne vypolnitsya, a komanda

         cat <&lt; file2 >&gt;! file1

     vypolnitsya.   Predopredelennaya   peremennaya   noclobber
     ispol'zuetsya  kak klyuch, zapreshchayushchij sluchajnoe povrezhde-
     nie sushchestvuyushchih fajlov.  Konstrukcii >&gt;!,  >&gt;>&gt;!,  >&gt;&!  i
     >&gt;>&gt;&!   otmenyayut  dejstvie  etogo klyucha dlya ukazannogo v
     komandnoj stroke fajla.

>&gt;& imya_fajla   ili   >&gt;&! imya_fajla
     v pervom sluchae diagnosticheskie soobshcheniya  napravlyayutsya
     v  fajl,  vo vtorom - budet sdelano to zhe, no s otmenoj
     dejstviya klyucha noclobber.

>&gt;>&gt; imya_fajla  ili  >&gt;>&gt;! imya_fajla
     vyvod pomeshchaetsya v konec fajla. Esli fajl  otsutstvuet,
     to  on sozdaetsya, vo vtorom - budet sdelano to zhe, no s
     otmenoj dejstviya klyucha noclobber.

>&gt;>&gt;& imya_fajla  ili  >&gt;>&gt;&! imya_fajla
     v pervom sluchae csh dobavit diagnosticheskie soobshcheniya v
     fajl,  vo vtorom sluchae budet sdelano to zhe, no s otme-
     noj dejstviya klyucha noclobber.


     Mozhno zapretit' izmenenie rasshireniya imeni fajla.   Dlya
etoj  celi  ispol'zuetsya  klyuch  noglob.   V obshchem sluchae imya
fajla imeet vid: osnova_imeni.suffiks.  Esli ustanovlen klyuch
noglob,  izmenenie  suffiksov imen sushchestvuyushchih fajlov budet
porozhdat' sostoyanie oshibki. CHtoby  otmenit'  dejstvie  etogo
klyucha  dlya konkretnyh fajlov, v komandnyh strokah mozhno uka-
zyvat' te zhe konstrukcii,  chto  i  pri  ispol'zovanii  klyucha
noclobber.

     Sushchestvuet  vozmozhnost'  perenapravleniya  soobshchenij  ob
oshibkah  v  konvejere. S etoj cel'yu ispol'zuetsya konstrukciya
|&. Ee ispol'zovanie v konvejere privedet k  tomu,  chto  vse
diagnosticheskie soobshcheniya budut napravleny ne na ekran disp-
leya (standartnyj vyvod oshibok), a vmeste s  ostal'nym  vyvo-
dom. Naprimer, soobshcheniya ob oshibkah v konvejere

    cat <&lt; file1 |& pr -w79 -l24 >&gt; file2

budut napravleny ne na standartnyj vyvod (ekran displeya),  a
cherez pr v file2.

1.4.  Upravlenie processami

     Process yavlyaetsya osnovnym ob®ektom DEMOS, mozhet  vypol-
nyat'sya  sinhronno  i  asinhronno.   Sinhronnyj process - eto


                           - 11 -










process, kotoryj na vse  vremya  vypolneniya  preryvaet  svyaz'
mezhdu  pol'zovatelem  i interpretatorom, asinhronnyj process
vypolnyaetsya  parallel'no  s  csh.   Komandnaya  stroka  mozhet
porozhdat' neskol'ko processov, kazhdomu iz kotoryh prisvaiva-
etsya unikal'nyj nomer - identifikator. Identifikator ispol'-
zuetsya dlya upravleniya processom. Sushchestvuyut dva tipa identi-
fikatorov processa: sistemnyj i vnutrennij.  Sistemnyj iden-
tifikator  processa vyvoditsya komandoj ps i otnositsya k kazh-
domu processu.  Kazhdomu sistemnomu  identifikatoru  processa
stavit'sya  v  sootvetstvie unikal'nyj vnutrennij identifika-
tor.   Vnutrennij  identifikator  processa  izvesten  tol'ko
pol'zovatelyu, otnositsya ko vsem processam, porozhdennym odnoj
komandnoj strokoj, i ispol'zuetsya dlya upravleniya processom v
komandah  fg,  bg,  stop, kill, notify.  Process mozhet naho-
dit'sya v dvuh sostoyaniyah - vypolnyat'sya ili byt'  priostanov-
lennym.   Mehanizm  upravleniya  processom vklyuchaet sleduyushchie
sredstva:

     zavershenie vypolneniya sinhronnogo  (asinhronnogo)  pro-
     cessa;


     priostanovlenie (vozobnovlenie) vypolneniya  sinhronnogo
     (asinhronnogo) processa;


     izmenenie rezhima vypolneniya processa s  sinhronnogo  na
     asinhronnyj i naoborot;


     vyvod  soobshcheniya  o  sostoyaniyah  asinhronnogo  processa
     posle ego zaversheniya ili v moment izmeneniya;


     upravlenie vvodom-vyvodom pri vypolnenii processa;


     poslat' signal processu;


     upravlenie resursami processa.


     Svedeniya o processah hranyatsya  interpretatorom  v  vide
tablicy.    Aktual'noe  sostoyanie  tablicy  mozhno  poluchit',
vypolniv komandu jobs ili jobs -l. Vo  vtorom  sluchae  vyvo-
ditsya  bolee podrobnaya informaciya.  Posle vypolneniya komandy
jobs poluchim, naprimer:







                           - 12 -










       [1]    Ostanovlen   cc -c *.o
       [2]  - Ostanovlen   make install
       [3]  + Ostanovlen   red file
       [4]    Vypolnyaetsya  sort file >&gt; result &
       [5]    Vypolnyaetsya  mx -q -N -u -s *.m >&gt; out &

Kazhdaya stroka tablicy soderzhit svedeniya  o  konkretnom  pro-
cesse.  V kvadratnyh skobkah ukazan vnutrennij identifikator
processa.  Sushchestvuet neskol'ko sposobov ukazaniya  identifi-
katora v komandnoj stroke pri ssylke na element tablicy pro-
cessov:

% ili %+
     poslednij iz priostanovlennyh;

%-
     predposlednij iz priostanovlennyh;

%nomer
     lyuboj s takim vnutrennim identifikatorom;

%simvoly
     lyuboj s takimi pervymi simvolami stroki;

%?shablon?
     lyuboj process s takim shablonom v stroke.


     Zapusk sinhronnogo processa osushchestvlyaetsya v rezul'tate
vypolneniya komandnoj stroki, na konce kotoroj net simvola &.
CHtoby prekratit' vypolnenie sinhronnogo processa, neobhodimo
napechatat'  simvol  SU/C  (CTRL/C).  Esli  nuzhno  prekratit'
vypolnenie sinhronnogo processa s sohraneniem v fajle obraza
pamyati,  to  neobhodimo napechatat' simvol SU/\ (CTRL/\). Pri
etom v rabochem kataloge budet zapisan fajl  s  imenem  core.
Fajl core yavlyaetsya kopiej pamyati, kotoruyu zanimal v OZU pro-
cess v moment, kogda byl poslan signal SU/\.

     Sinhronnyj process mozhet vyvodit' informaciyu  na  ekran
displeya.  V  etom sluchae, chtoby priostanovit' vyvod, neobho-
dimo  napechatat'  simvol  SU/S  (CTRL/S),  chtoby  prodolzhit'
vypolnenie,  neobhodimo  napechatat'  simvol  SU/Q  (CTRL/Q).
Esli sinhronnyj process ne vyvodit  informaciyu  na  displej,
chtoby  ego  priostanovit', neobhodimo napechatat' simvol SU/Z
(CTRL/Z), a chtoby prodolzhit' - napechatat' fg ili %.  Opisan-
nye sposoby upravleniya sinhronnym processom sushchestvenno raz-
lichny.  Pervyj ispol'zuetsya tol'ko v sluchae vyvoda na  disp-
lej,  vtoroj mozhno ispol'zovat' v lyubom sluchae.  Krome togo,
pri ispol'zovanii SU/Z sinhronnyj process priostanavlivaetsya
s  vozobnovleniem raboty csh, a pri ispol'zovanii SU/S etogo
ne proishodit.  Sushchestvuet vozmozhnost' perevesti process  iz
sinhronnogo v asinhronnyj rezhim vypolneniya.  Dlya etogo neob-
hodimo priostanovit' ego, ispol'zuya SU/Z,  zatem  napechatat'


                           - 13 -










bg.  S  etogo  momenta  i do svoego zaversheniya process budet
vypolnyat'sya asinhronno.

     Zapusk asinhronnogo processa osushchestvlyaetsya  v  rezul'-
tate  vypolneniya  komandnoj  stroki,  v konce kotoroj ukazan
simvol &.  Posle  zapuska  asinhronnogo  processa  na  ekran
displeya vyvoditsya soobshchenie vida

    [chislo]   chislo

CHislo v kvadratnyh skobkah - vnutrennij  identifikator  pro-
cessa,  chislo bez skobok - sistemnyj identifikator processa.
CHtoby priostanovit' vypolnenie asinhronnogo processa,  neob-
hodimo napechatat'

            stop %identifikator_processa
      ili
            stop %stroka

V formate stop %stroka v kachestve stroki  ispol'zuetsya  odna
iz form ssylki na tablicu processov.  Dopustim, imeetsya nes-
kol'ko asinhronno vypolnyaemyh processov:

    1  sort file >&gt; /tmp/result &
    2  cc *.c >&gt;& errors &
    3  lint *.c >&gt;& mymsg &

Pervyj mozhno ostanovit' tak: stop %1 ili stop %sort;  vtoroj
-  stop  %2  ili stop %c; tretij - stop %3 ili stop %li, ili
stop %?mymsg?.  CHtoby vozobnovit' vypolnenie  priostanovlen-
nogo  processa,  ispol'zuetsya komanda fg dlya zapuska ego kak
sinhronnogo i bg dlya zapuska ego kak asinhronnogo.  Varianty
zapuska  na  asinhronnoe  vypolnenie  priostanovlennogo pro-
cessa:

    %identifikator_processa &
    %stroka &
    bg %identifikator_processa
    bg %stroka
    fg %identifikator_processa &
    fg %stroka &

Varianty zapuska na sinhronnoe vypolnenie  priostanovlennogo
processa:

    %identifikator_processa
    %stroka
    fg %identifikator_processa
    fg %stroka


     CHasto voznikaet neobhodimost'  prinuditel'no  (do  nor-
mal'nogo  okonchaniya) zavershit' rabotu asinhronnogo processa.


                           - 14 -










Pri etom ne vazhno, vypolnyaetsya on ili priostanovlen.  V etom
sluchae  processu  neobhodimo  poslat' signal prinuditel'nogo
zaversheniya:

            kill -KILL %identifikator_processa
      ili
            kill -KILL %stroka
      ili
            kill -KILL sistemnyj_identifikator_processa

Dlya   priostanovki   interpretatora   ispol'zuetsya   komanda
suspend, tak kak komandu SU/Z interpretator ignoriruet.

     Asinhronnye processy proizvodyat vyvod standartnym obra-
zom. Vyvod mozhno zapretit', vypolniv komandu

    stty tostop

Esli ustanovlen klyuch terminala tostop, vse asinhronnye  pro-
cessy  budut  ostanavlivat'sya pri popytke ispol'zovat' stan-
dartnyj vyvod.  Pri popytke chteniya s  terminala  asinhronnyj
process ostanavlivaetsya v lyubom sluchae. Primer:

    stty tostop
    cat <&lt; file &
    [1] 285
    jobs
    [1]  + ZHdet (vyvod na terminal) cat <&lt; file

CHtoby vozobnovit' vyvod, neobhodimo vypolnit' komandu

            fg %1
    ili
            fg %cat

CHtoby otmenit' klyuch tostop, sleduet vypolnit' komandu

    stty -tostop


     Komanda kill ispol'zuetsya dlya posylki signala processu.
Formaty komandy kill:

kill -l
     vyvesti spisok signalov;

kill %nomer ili kill %stroka
     poslat' signal TERM (okonchit') processu;

kill sistemnyj_identifikator_processa
     poslat' signal TERM processu;




                           - 15 -










kill -SIG process
     poslat' signal SIG processu.


     Signaly zadayutsya libo po ih nomeram, libo po ih  imenam
(kak  oni  zadany v /usr/include/signal.h bez prefiksa SIG).
Obychno vse soobshcheniya ob izmenenii sostoyanij  processa  vyvo-
dyatsya na ekran displeya posle vyvoda priglasheniya (ne v moment
vypolneniya drugogo processa). Peremennaya  notify,  esli  ona
ustanovlena,  obespechivaet  vyvod vseh soobshchenij asinhronno.
Mozhno ustanovit' rezhim notify dlya  vseh  processov  ili  dlya
konkretnogo processa:

    notify        - ustanovlen dlya vseh processov;

    unset notify  - otmena rezhima;

    notify %nomer - ustanovlen dlya processa s nomerom.


     Dlya  32-bitnyh  mashin  voznikaet  problema  ogranicheniya
resursov,  vydelennyh processu.  Imeetsya vozmozhnost' ograni-
chivat' sleduyushchie tipy resursov:

cputime
     maksimal'noe  chislo  sekund  central'nogo   processora,
     otvodimoe kazhdomu processu;

filesize
     maksimal'nyj razmer fajla, kotoryj mozhno sozdat';

datasize
     maksimal'noe  uvelichenie  oblasti  (dannye  +  stek)  s
     pomoshch'yu sbrk(2) za granicu teksta programmy;

stacksize
     maksimal'nyj razmer avtomaticheski  rasshiryaemoj  oblasti
     steka;

coredumpsize
     maksimal'nyj razmer dampa, kotoryj budet sozdan.


     Dlya opredeleniya razmera  resursa  ispol'zuetsya  komanda
limit,  dlya otmeny - komanda unlimit.  Dlya vseh tipov resur-
sov, krome cputime, ispol'zuetsya razmernost' k  -  Kilobajty
ili m - Megabajty.  Dlya cputime ispol'zuyutsya ss - sekundy, m
- minuty, h - chasy. Dlya ukazaniya tipa resursov  ispol'zuyutsya
privedennye vyshe klyuchevye slova. Primery:






                           - 16 -










    limit cputime 1m     (1 minuta)

    limit cputime 05:30  (5minut 30 sekund)

    limit filesize 2m    (razmer fajla do 2 Mbajt)


1.5.  SHablony imen fajlov i katalogov

     Esli slovo soderzhit odin iz simvolov *, ?, [, ],  {,  }
ili  nachinaetsya  s  simvola ~ (nadcherkivanie), to ono stano-
vitsya kandidatom na podstanovku imeni fajla.  Pri etom  dan-
noe  slovo  rassmatrivaetsya  kak  shablon, kotoryj zamenyaetsya
otsortirovannym v alfavitnom poryadke  spiskom  imen  fajlov,
kotorye sootvetstvuyut shablonu. Esli ni dlya odnogo vozmozhnogo
varianta podstanovki  imeni  po  shablonu  ne  nahoditsya,  to
porozhdaetsya  sostoyanie oshibki. Nizhe raskryty znacheniya simvo-
lov v shablonah imen fajlov i katalogov.

*
     sootvetstvuet lyuboj posledovatel'nosti simvolov. Napri-
     mer, po komande echo * budut pokazany imena vseh fajlov
     rabochego kataloga, po komande echo */*/f*  budut  pros-
     motreny vhodyashchie katalogi i vyveden spisok vseh fajlov,
     imena kotoryh nachinayutsya na f.

?
     sootvetstvuet odnomu lyubomu simvolu. Primer:

         % ls f.?
         f.c
         f.o
         f.s

     budut vyvedeny imena vseh fajlov  kataloga,  kotorye  v
     kachestve osnovy imeni imeyut simvol f, a v kachestve ras-
     shireniya imeni - odin lyuboj simvol.

[posledovatel'nost'_simvolov]
     sootvetstvuet lyubomu simvolu  ukazannoj  posledovatel'-
     nosti.  Primer:

         % ls f.[cso]
         f.c
         f.o
         f.s


[simvol-simvol]
     sootvetstvuet lyubomu simvolu iz leksikograficheski  upo-
     ryadochennogo diapazona. Primer:




                           - 17 -










         % ls f.[a-z]
         f.c
         f.o
         f.s

     Vyvodyatsya vse fajly, rasshirenie imeni kotoryh  -  lyubaya
     strochnaya bukva latinskogo alfavita.

 ~ (nadcherkivanie)
     registracionnyj katalog, naprimer po komande

         ls -l ~

     budet vyvedeno soderzhimoe kataloga, v kotoryj vy  popa-
     daete  pri vhode v sistemu. Takoj katalog prinyato nazy-
     vat' registracionnym.

 ~registracionnoe_imya_pol'zovatelya
     registracionnyj katalog pol'zovatelya. Primer:

         % ls ~Ivanov

     budet  vyvedeno  soderzhimoe  registracionnogo  kataloga
     pol'zovatelya s imenem Ivanov.

{spisok_simvolov_cherez_zapyatuyu}
     sootvetstvuet lyubomu iz perechislennyh simvolov. Primer:

         % ls f.{c,s,o}
         f.c
         f.o
         f.s


slovo1{spisok_slov_cherez_zapyatuyu}slovo2
     k slovo1 dobavlyaetsya pervoe  slovo  iz  spiska  slov  i
     dobavlyaetsya slovo2. Dalee povtoryaetsya dlya vtorogo slova
     iz spiska slov i tak  dalee.  Ne  dopuskayutsya  probely.
     Slovo1 i/ili slovo2 mogut otsutstvovat'.  Primer:

         % ls aaa{ddd,ccc,bbb}eee
         aaadddeee ne najden
         aaaccceee ne najden
         aaabbbeee ne najden

     Pri poiske fajlov formirovalis' ih  imena  kombinaciyami
     ukazannyh   posledovatel'nostej.  Soobshchenie  ne  najden
     vyvoditsya, kogda takoj fajl komandoj ls ne obnaruzhen.


     Opisannaya konstrukciya ispol'zuetsya ne tol'ko dlya  pods-
tanovki imen fajlov, no i dlya generacii razlichnyh slov, nap-
rimer:


                           - 18 -










    % echo Ta{nya,nyu,ne,t'yana,t'yanu,t'yane}
    Tanya Tanyu Tane Tat'yana Tat'yanu Tat'yane

Vozmozhny i bolee slozhnye primeneniya, naprimer:

    %echo Ta{nya,t'yana,nechka}{' Ivanova',' Petrova'}
    Tanya Ivanova Tanya Petrova
    Tat'yana Ivanova Tat'yana Petrova
    Tanechka Ivanova Tanechka Petrova


     Pri sozdanii shablona imeni fajla osoboe mesto  zanimaet
simvol  tochka  v pervoj pozicii imeni.  Esli imya fajla imeet
vid .imya, to tochku neobhodimo ukazat' yavno.

     V ryade sluchaev metasimvoly shablonov imen fajlov i kata-
logov  ne  ekraniruyutsya simvolom \.  Neobhodima opredelennaya
ostorozhnost' pri ispol'zovanii etih  simvolov  tam,  gde  po
kontekstu  ne  sleduet  vypolnyat'  podstanovki imen fajlov i
katalogov.

     Vyshe bylo skazano, chto esli ukazannomu shablonu ne soot-
vetstvuet  ni  odno  imya, to porozhdaetsya sostoyanie oshibki. V
nekotoryh sluchayah eto mozhet privesti k nezhelatel'nomu  prek-
rashcheniyu  vypolneniya  zadaniya.   Sushchestvuet klyuch, svyazannyj s
shablonami i imenami fajlov, - nonomatch.  Esli  on  ustanov-
len,  interpretator csh soobshchaet, chto ukazannomu v komandnoj
stroke shablonu ne sootvetstvuet ni odin fajl  v  kataloge  i
etot shablon vyvoditsya na standartnyj vyvod. Pust', naprimer,
imeyutsya fajly f.1, f.2 i f.3.  Vypolnim komandu  echo  f.[4-
9], poluchim soobshchenie ob oshibke:

    echo: Net takih imen.

Teper' vypolnim komandy

    set nonomatch; echo f.[4-9]

poluchim soobshchenie: f.[4-9].  V pervom sluchae  bylo  vyvedeno
soobshchenie  komandy  echo  ob  oshibke.   Vo vtorom sluchae byl
vyveden shablon f.[4-9],  otnositel'no  kotorogo  ne  udalos'
podobrat'  imya fajla.  Principial'noe otlichie vtorogo sluchaya
ot pervogo zaklyuchaetsya v tom, chto ne  porozhdalos'  sostoyanie
oshibki - prosto byl vyveden shablon.

1.6.  Podstanovki znachenij peremennyh

     V yazyke C-shell opredeleny sleduyushchie  tipy  peremennyh:
slovo, stroka, massiv slov, pozicionnaya peremennaya.

     V otlichie ot drugih yazykov programmirovaniya, kogda uka-
zanie  imeni  peremennoj  (naprimer, v vyrazhenii) privodit k
podstanovke ee znacheniya,  v  yazyke  C-shell  trebuetsya  yavno


                           - 19 -










ukazyvat', kogda sobstvenno neobhodimo ispol'zovat' znachenie
peremennoj.  Opredelit' peremennuyu i prisvoit'  ej  znachenie
mozhno s pomoshch'yu komandy set ili prisvoiv peremennoj znachenie
vyrazheniya (naprimer, @ a = 5).  Podstanovka  znachenij  pere-
mennyh  vypolnyaetsya  posle podstanovki imen komand i fajlov,
esli pered imenem peremennoj ukazan bez  probela  simvol  $.
Simvoly  ?, # ispol'zuyutsya dlya upravleniya rezhimami podstano-
vok. Imeyutsya sleduyushchie tipy podstanovok:

     podstanovka sobstvennogo znacheniya peremennoj;


     podstanovka sobstvennogo znacheniya pozicionnoj  peremen-
     noj;


     podstanovka informacii o peremennoj,  naprimer  oprede-
     lena ona ili net.


     Pozicionnye  peremennye  inicializiruyutsya  v  komandnoj
stroke pri zapuske komandnogo fajla na vypolnenie. Naprimer,

    comfile aaa bbb ccc ddd

kazhdoe slovo etoj komandnoj stroki dostupno  vnutri  komand-
nogo  fajla  comfile.  CHtoby poluchit' znachenie slova, dosta-
tochno ukazat' ego nomer v stroke, naprimer vmesto $0 podsta-
vitsya  comfile, vmesto $3 - ccc.  Rassmotrim primery prostyh
podstanovok.

    % set a = 5
    % echo a
    a
    % echo $a
    5

Dejstvie simvola $ mozhno otmenit', ukazav pered  nim  simvol
\.  Naprimer:

    % set a = 5
    % echo \$a
    $a
    % echo $a
    5

V posledovatel'nosti simvolov,  vzyatyh  v  dvojnye  kavychki,
vsegda dejstvuet simvol $, naprimer:







                           - 20 -










    % set a = 5
    % echo \$a
    $a
    % echo "\$a"
    \5
    % set b = "Misha, Valera, $a."
    % echo $b
    Misha, Valera, 5.
    %
    % set b = "Misha, Valera, \$a."
    % echo $b
    Misha, Valera, \5.


     V posledovatel'nosti simvolov, vzyatyh v odinarnye  pra-
vye kavychki, dejstvie simvola $ otmenyaetsya, naprimer:

    % set a = 5
    %set b = 'Misha, Valera, $a.'
    % echo $b
    Misha, Valera, $a.
    %
    % set b = 'Misha, Valera, \$a.'
    % echo $b
    Misha, Valera, \$a.

V posledovatel'nosti  simvolov,  vzyatyh  v  odinarnye  levye
(obratnye) kavychki, simvol $ privodit k podstanovke peremen-
noj.  Podstanovka proishodit neposredstvenno pered  vypolne-
niem komandy, vzyatoj v levye kavychki.  Primer: pust' imeetsya
komandnyj fajl f.csh:

    # !/bin/csh
    set a = 1  b = '`echo $v`'  c = 3
    echo a = $a b = $b c = $c
    set v = 100
    @ b++
    echo b = $b
    @ d = ( $a + $b + $c )
    echo d = $d

Pervaya  stroka  nachinaetsya  simvolom  #  -  tak  v  C-shell-
programme  oboznachaetsya stroka-kommentarij. Zapis' !/bin/csh
ukazyvaet, chto komandnyj fajl dolzhen vypolnyat'sya interpreta-
torom csh.  V rezul'tate vypolneniya poluchim:

    % f.csh
    a = 1 b = `echo $v` c = 3
    b = 101
    d = 105

Zdes' peremennym a, b, c i v prisvaivayutsya razlichnye  znache-
niya,  kotorye  zatem  ispol'zuyutsya  v vychisleniyah v strokah,


                           - 21 -










pomechennyh simvolom @. Vse dejstviya  soprovozhdayutsya  vyvodom
znachenij  peremennyh.  V stroke set b = '`echo $v`' peremen-
noj  b  prisvaivaetsya  stroka  simvolov.   Odinochnye  pravye
kavychki  zapreshchayut podstanovku komande set i pri vyvode zna-
cheniya b imeem: b = `echo $v`.  V stroke  @  b++  vypolnyaetsya
komanda  `echo  $v`  (eto  znachenie  peremennoj  b  k  etomu
momentu), posle chego znachenie peremennoj b uvelichivaetsya  na
1.  Velichina b ravna teper' 101 i ispol'zuetsya dalee.

     Pri vypolnenii podstanovok osobuyu rol' vypolnyayut figur-
nye  skobki.   Dopustim,  imeetsya  neobhodimost' osushchestvit'
konkatenaciyu znacheniya peremennoj s nekotoroj  posledovatel'-
nost'yu simvolov.  Togda, ispol'zuya figurnye skobki, poluchim:

    % set a = 'Oper'
    % echo ${a}cionnaya sistema
    Operacionnaya sistema
    % echo ${a}ciya
    Operaciya
    % echo Issledovanie ${a}acij
    Issledovanie Operacij

Nizhe perechisleny vse formy podstanovok v razlichnyh rezhimah:

$peremennaya ili ${peremennaya}
     podstavlyaetsya znachenie peremennoj; {} vydelyayut peremen-
     nuyu ot drugih simvolov, idushchih sledom bez razdelitelya;

$peremennaya[nomer] ili ${peremennaya[nomer]}
     podstavlyaetsya slovo nomer iz massiva slov;

$?peremennaya ili ${?peremennaya}
     podstavlyaetsya 1, esli peremennaya opredelena, inache 0;

$$
     podstavlyaetsya desyatichnyj nomer processa csh;

$#peremennaya ili ${#peremennaya}
     podstavlyaetsya kolichestvo slov, hranyashchihsya v massive;

$?0 ili ${?0}
     podstavlyaetsya 1, esli vhodnoj fajl opredelen, inache 0;

$0
     podstavlyaetsya imya fajla, kotoryj v dannyj  moment  vre-
     meni vypolnyaet interpretator;

$chislo ili ${chislo}
     ekvivalentno $argv[chislo];

$*
     ekvivalentno  $argv[*],  t.e.  eto  stroka   parametrov
     komandy, kotoroj byl zapushchen csh.


                           - 22 -










     Nizhe privedeny primery razlichnyh variantov  ispol'zova-
niya  podstanovok  v komandnom fajle f.csh.  Pokazany 23 raz-
lichnyh sluchaya ispol'zovaniya podstanovok, kazhdyj sluchaj vyde-
len strokoj kommentariev.  Za simvolom # v kommentariyah uka-
zany nomera variantov.  CHtoby legche bylo  orientirovat'sya  v
vyvode  rezul'tatov,  on organizovan takim obrazom, chto sna-
chala vyvoditsya nomer varianta, potom rezul'tat ego  vypolne-
niya:















































                           - 23 -










    # !/bin/csh
            set m = ( w1 w2 w3 w4 w5 )
    # 1 - 2
            if( $?m ) then
                    echo 1 $m
            else
                    echo 2 0
            endif
    # 3 - 4
            if( ${?m} ) then
                    echo 3 $m
            else
                    echo 4 0
            endif
    # 5 - 6
            if( $?0 ) then
                    echo 5 1
            else
                    echo 6 0
            endif
    # 7 - 8
            if( ${?0} ) then
                    echo 7 1
            else
                    echo 8 0
            endif
    # 9
            echo 9  $$
            @ p = ( $$ + 10 )
    # 10
            echo 10 $p
            date >&gt; ofile$$
    # 11
            echo  "11  `ls ofile$$`"
            cat ofile$$
            set p = 2
            @ p++
    # 12 - 17
            echo  12 p = $p
            echo  13 ${p}aaa
            echo  14 $m[1]
            echo  15 $m[5]
            echo  16 $m[2-4]
            echo  17 ${m[3]}aaa
    # 18 - 23
            set p = $#m
            echo  18 $p
            echo  19 ${#m}aaa
            echo  20 $0
            echo  21 $3
            echo  22 ${3}ddd
            echo  23 $*



                           - 24 -










Zapustim na vypolnenie  etot  komandnyj  fajl  so  sleduyushchim
spiskom  argumentov:  11  22  33 44 55 66.  Posle vypolneniya
poluchim:

    % f.csh 11 22 33 44 55 66
    1 w1 w2 w3 w4 w5
    3 w1 w2 w3 w4 w5
    5 1
    7 1
    9 525
    10 535
    11  ofile525
    Vos Iyul 10 22:57:20 MSK 1988
    12 p = 3
    13 3aaa
    14 w1
    15 w5
    16 w2 w3 w4
    17 w3aaa
    18 5
    19 5aaa
    20 f.csh
    21 33
    22 33ddd
    23 11 22 33 44 55 66

Rezul'taty vseh variantov, krome 11, legko ob®yasnimy.  Zdes'
nomer  processa ispol'zuetsya dlya sozdaniya fajla s unikal'nym
imenem. |tot priem chasto ispol'zuyut, kogda neobhodimo  polu-
chit' takoj fajl.  Varianty 20 - 23 demonstriruyut ispol'zova-
nie peremennoj argv. |ta peremennaya poluchaet  svoe  znachenie
iz  komandnoj  stroki  f.csh  11  22 33 44 55 66, kotoruyu my
vveli pri zapuske komandnogo fajla.

     Konstrukciya $<&lt; ispol'zuetsya dlya chteniya stroki s klavia-
tury  displeya.  Esli v spiske peremennyh ukazana konstrukciya
$<&lt;, to interpretator zhdet vvoda s klaviatury displeya i zame-
nyaet $<&lt; na napechatannuyu stroku

















                           - 25 -










    % set cveta = $<&lt;
    krasnyj sinij zelenyj
    % echo $cveta
    krasnyj sinij zelenyj
    % @ aaa = 1 + $<&lt; + 3
    2
    % echo $aaa
    6
    % echo $<&lt;
    krasnyj sinij zelenyj
    krasnyj sinij zelenyj
    % set cveta = ( krasnyj sinij zelenyj $<&lt; seryj )
    belyj
    % echo cveta: $cveta
    cveta: krasnyj sinij zelenyj belyj seryj
    % echo $cveta[4]
    belyj
    % set cveta[4] = $<&lt;
    goluboj
    % echo $cveta[4]
    goluboj

V nekotoryh versiyah interpretatora  csh  konstrukciya  $<&lt;  ne
ispol'zuetsya.  V  etom sluchae mozhno vospol'zovat'sya komandoj
sistemy rline, naprimer:

    % set a = `rline`
    DEMOS
    % echo $a
    DEMOS


1.7.  Modifikatory peremennyh

     CHasto byvaet neobhodimo izmenit' znachenie peremennoj  i
ispol'zovat'  v podstanovke izmenennoe znachenie. Dlya izmene-
niya znachenij peremennyh ispol'zuyutsya tak nazyvaemye  modifi-
katory,  kotorye  prednaznacheny  v  osnovnom dlya manipulyacij
imenami fajlov i katalogov.  Kak pravilo, modifikatory zapi-
syvayutsya v vide

    modificiruemoe_slovo:modifikator

Nizhe perechisleny vse formy ispol'zovaniya modifikatorov:

h    udalit' imya fajla, sohraniv komponenty  puti  (to  est'
     udalit' v slove tekst sprava do blizhajshego simvola /);

gh   primenit' modifikator h global'no, ko vsem slovam;

r    udalit' rasshirenie imeni fajla, ukazannoe cherez  tochku,
     i samu tochku;



                           - 26 -










gr   vypolnit' modifikator r global'no, ko vsem slovam;

e    udalit' imya fajla vmeste s tochkoj, sohraniv  rasshirenie
     imeni;

ge   vypolnit' modifikator e global'no, ko vsem slovam;

t    sohranit' imya fajla, udaliv komponenty  puti  (to  est'
     udalit'  tekst  sleva ot samogo pravogo simvola / i sam
     etot simvol);

gt   primenit' modifikator t global'no, ko vsem slovam;

q    zapretit' dal'nejshuyu modifikaciyu slova. Slovo  zaklyucha-
     etsya v kavychki;

x    razbit' na slova po razdelitelyam i zapretit' dal'nejshuyu
     modifikaciyu. Rezul'tat zaklyuchaetsya v kavychki.


     Bessmyslenno primenyat' modifikatory k sleduyushchim sintak-
sicheskim formam podstanovok:

    $?peremennaya
    ${?peremennaya}
    $?0
    $$


     V kazhdoj podstanovke  mozhno  ispol'zovat'  tol'ko  odin
modifikator.  Pered modifikatorom dolzhen stoyat' simvol dvoe-
tochie.  Esli v podstanovke ispol'zuyutsya simvoly {},  modifi-
kator dolzhen nahodit'sya vnutri figurnyh skobok.  V komandnom
fajle f.csh pokazany primery ispol'zovaniya modifikatorov:





















                           - 27 -










    #!/bin/csh
            set a = /usr/bin/pr1
            set b = /dir1/dir11/dir111/file.c
            set c = (/d/d1/d2/f.c /d/d1/c.c /d5/f.s )

    # Variant 1
            echo 'Variant 1'
            echo $a:h
            echo $b:h
            echo $c[1]:h
            echo ${c[2]:h}
            echo $c[3]:h

    # Variant 2
            echo 'Variant 2'
            echo $a:t
            echo $b:t
            echo $c[1]:t
            echo ${c[2]:t}
            echo $c[3]:t

    # Variant 3
            echo 'Variant 3'
            echo $a:r
            echo $a:e
            echo $b:r
            echo $b:e
            echo $c[1]:r
            echo $c[1]:e
            echo ${c[2]:r}
            echo ${c[2]:e}
            echo $c[3]:r
            echo $c[3]:e

    # Variant 4
            echo 'Variant 4'
            echo $c:gh
            echo $c:gt
            echo $c:gr

    # Variant 5
            echo 'Variant 5'
            set m = "$c:x"
            echo $m
            echo $m[1]:t
            echo $m[1]:r

    # Variant 6
            echo 'Variant 6'
            set m = "$c:q"
            echo $m
            echo $m[1]:h
            echo $m[1]:r


                           - 28 -










Posle vypolneniya komandnogo fajla poluchim:

    % f.csh
    Variant 1
    /usr/bin
    /dir1/dir11/dir111
    /d/d1/d2
    /d/d1
    /d5
    Variant 2
    pr1
    file.c
    f.c
    c.c
    f.s
    Variant 3
    /usr/bin/pr1
    pustaya stroka
    net rasshireniya imeni u fajla pr1
    /dir1/dir11/dir111/file
    c
    /d/d1/d2/f
    c
    /d/d1/c
    c
    /d5/f
    s
    Variant 4
    /d/d1/d2 /d/d1 /d5
    f.c c.c f.s
    /d/d1/d2/f /d/d1/c /d5/f
    Variant 5
    /d/d1/d2/f.c /d/d1/c.c /d5/f.s
    f.s
    /d/d1/d2/f.c /d/d1/c.c /d5/f
    Variant 6
    /d/d1/d2/f.c /d/d1/c.c /d5/f.s
    /d/d1/d2/f.c /d/d1/c.c /d5
    /d/d1/d2/f.c /d/d1/c.c /d5/f


     Vyvod  rezul'tatov  organizovan  takim  obrazom,  chtoby
mozhno  bylo otlichit' dejstviya kazhdogo varianta ispol'zovaniya
modifikatorov.  Varianty 5 i 6 demonstriruyut dejstviya  modi-
fikatorov  x  i  q . Peremennaya c soderzhit spisok slov. |tot
spisok prisvaivaetsya peremennoj m i k nemu poocheredno prime-
nyayutsya  modifikatory x i q.  Iz primera vidno, chto etot spi-
sok prevrashchaetsya v odno slovo, i modifikatory h, t i r rabo-
tayut s etim spiskom kak s odnim slovom.






                           - 29 -










1.8.  Vyrazheniya

     Simvol @ v nachale stroki oznachaet,  chto  vse  ukazannye
dalee slova obrazuyut vyrazhenie, naprimer:

    % set a = 5  b = 7
    % @ c = ( $a + $b )
    % echo $c
    12


     V  yazyke  C-shell  chislom  schitaetsya  lyubaya  simvol'naya
stroka,  kotoraya mozhet interpretirovat'sya kak celoe desyatich-
noe chislo.  Esli v vyrazhenii primenyaetsya stroka, kotoraya  ne
mozhet  interpretirovat'sya  kak  chislo, porozhdaetsya sostoyanie
oshibki.  V kachestve logicheskih znachenij  ispol'zuyutsya  chisla
(0  -  lozh'  i  1 - istina). Kak istina vosprinimaetsya lyuboe
chislo, otlichnoe ot nulya.  Vyrazheniya i operacii v  C-shell  v
osnovnom  analogichny  operaciyam  v yazyke Si. Vyrazheniya mozhno
ispol'zovat' takzhe v operatorah if_then_else, while, exit. V
vyrazhenie   v  kachestve  prostogo  operanda  mozhno  vklyuchat'
komandu sistemy, vzyatuyu v figurnye skobki. V processe vychis-
lenij  eta  komanda budet vypolnena, i rezul'tat budet pods-
tavlen v vyrazhenie.   V  vyrazheniyah  ispol'zuyutsya  sleduyushchie
operacii:

operacii sravneniya strok

         ==   ili  =~   ravno?

         !=   ili  !~   ne ravno?

     V  kachestve  operandov  v  etih  operaciyah  primenyayutsya
     stroki.  V formah s simvolom ~ razreshaetsya ispol'zovat'
     v pravoj chasti shablony *, ? i [...].  |ta forma sravne-
     niya  strok  sokrashchaet  kolichestvo  konstrukcij switch v
     komandnyh fajlah.

operacii nad chislami
















                           - 30 -










          operand_celoe_chislo:
                 (dva operanda):
                              ||   ili
                              &&   i
                              <&lt;=   men'she ili ravno?
                              >&gt;=   bol'she ili ravno?
                               >&gt;   bol'she?
                               <&lt;   men'she?
                               +   slozhit'
                               -   vychest'
                               *   umnozhit'
                               /   delit'
                               %   ostatok deleniya
                 (odin operand):
                              ++    inkrement,
                                   (postfiksnaya)
                              --    dekrement,
                                   (postfiksnaya)
          porazryadnye_logicheskie:
                               &    umnozhenie
                               |    slozhenie
                               ^    isklyuchayushchee ili
                               ~    dopolnenie
                                   (unarnaya)
                               !    otricanie
                                   (unarnaya)
                              >&gt;>&gt;    sdvig vpravo
                              <&lt;<&lt;    sdvig vlevo


operacii oprosa svojstv fajla:
     oni zapisyvayutsya v vide -kod imya_fajla, gde kod -  odna
     iz sleduyushchih bukv, oboznachayushchih operaciyu:

         r (mozhno li chitat'?)
         w (mozhno li pisat'?)
         x (mozhno li vypolnyat'?)
         e (fajl sushchestvuet?)
         o (vypolnyayushchij vladelec fajla?)
         z (razmer fajla = 0 ?)
         f (fajl zashifrovan?)
         d (fajl - eto katalog?)

     Esli fajl obladaet trebuemym svojstvom, to vozvrashchaetsya
     znachenie istina, inache lozh'.

     Stroka s vyrazheniem mozhet imet' sleduyushchie formaty:

simvol @
     raspechatat' znacheniya vseh peremennyh;

@ imya operaciya_prisvaivaniya vyrazhenie
     prisvoenie peremennoj imya znacheniya vyrazheniya;


                           - 31 -










@ imya[celoe] operaciya_prisvaivaniya vyrazhenie
     prisvoenie znacheniya vyrazheniya elementu massiva.


     Operacii  prisvaivaniya  analogichny  podobnym  operaciyam
yazyka Si:

       =  +=  -=  *=  /=  %=

Poryadok vypolneniya operacij opredelyaetsya  libo po umolchaniyu,
s  uchetom  starshinstva, libo yavnym ukazaniem kruglyh skobok.
V pokazannom nizhe ryadu operacij starshinstvo operacij  rastet
sleva napravo:

       ||,  &&,  | ,  ^ ,  & ,  ==,  !=,

       <&lt;=,  >&gt;=,  <&lt; ,  >&gt; ,  <&lt;<&lt;,  >&gt;>&gt;,  + ,

       - ,  * ,  / ,  % ,  ! ,  ~ , ( )

Vnutri ukazannyh nizhe grupp operacii imeyut odinakovyj  prio-
ritet:

       [ =~, !~, ==, != ]
       [  <&lt;,  >&gt;, <&lt;=, >&gt;= ]
       [         <&lt;<&lt;, >&gt;>&gt; ]
       [          +,  - ]
       [      *,  /,  % ]


     Vse znaki operacij i  znak  prisvaivaniya  dolzhny  otde-
lyat'sya  ot operandov probelami.  CHasti vyrazhenij, soderzhashchie
znaki operacij, neobhodimo brat'  v  kruglye  skobki.  Pered
kruglymi  skobkami i za nimi dolzhen idti probel.  Kolichestvo
probelov, znakov tabulyacii ne  ogranichivaetsya,  eti  simvoly
yavlyayutsya tol'ko razdelitelyami.

     Nizhe  priveden  primer  komandnogo  fajla,  soderzhashchego
stroki s vyrazheniyami:
















                           - 32 -










    # !/bin/csh
    # variant 1
            set a = 5
            @ a++
            echo $a
            # rezul'tat: 6

    # variant 2
            @ a = 7
            echo $a
            # rezul'tat: 7

    # variant 3
            set a = 10  b = 15
            @ c = ( $a + $b )
            echo $c
            # rezul'tat:  25

    # variant 4
            @ c += 5
            echo $c
            # rezul'tat:  30

    # variant 5
            @ c = ( $c * 5 )
            echo $c
            # rezul'tat:  150

    # variant 6
            @ c *= 5
            echo $c
            # rezul'tat:  750

    # variant 7
            @ c *= $c
            echo $c
            # rezul'tat:  -27324

    # variant 8
            set  a = 5  b = 7  c = 9
            @ a = ( $a << 2 )
            @ b = ( $b >> 2 )
            @ c = ( $c + $a + $b )
            echo $a $b $c
            # rezul'tat:  20 1 30

    # variant 9
            set a = 5  b = 3
            @ c = ( $a | $b )
            echo $c
            # rezul'tat:  7

    # variant 10


                           - 33 -










            set a = 5 b = 3 c = 2
            @ d = ( ( $a + $b ) + ( $a + $b + $c ) )
            echo $d
            # rezul'tat:  18

    # variant 11
            set a = 5
            if( "$a" == "5" ) echo 'Stroki identichny'
            if( "$a" != "5" ) echo 'Stroki razlichny '
            # rezul'tat:  Stroki identichny

    # variant 12
            date >&gt; file
            chmod 755 file
            if( -x file ) echo 'Vypolnyaemyj'
            # rezul'tat:  Vypolnyaemyj

Varianty 1 - 6 samoob®yasnimy. V variante 7 poluchilos'  otri-
catel'noe  chislo, tak kak C-shell operiruet peremennymi tipa
integer (dva bajta na 16-razryadnoj |VM).

     V  vyrazheniyah  mozhno  ispol'zovat'   operacii   zaprosa
svojstv fajla:

    % set c = 0
    % @ c = -x  a.out  + 100
    % echo $c
    101
    % @ c = 100 - -x a.out
    % echo $c
    99


     Mozhno ukazat' v figurnyh skobkah  prostuyu  komandu.   V
kachestve znacheniya budet ispol'zovan kod vozvrata vypolnennoj
komandy

    % @ c = 100 - { date }
    sre fev 3 14:48:37 MSK 1988
    % echo $c
    99
    % @ c = { date rrrjjj } - 100
    Data: plohoj format
    % echo $c
    -100


     Imeyutsya poleznye razlichiya v operaciyah sravneniya strok:







                           - 34 -










      ==    !=

      ili

      =~    !~

V pervom sluchae v pravyh chastyah sravneniya  ne  interpretiru-
yutsya shablony

      ?  .  *   [...]

vo vtorom - interpretiruyutsya. Pust' v rabochem kataloge  ime-
yutsya fajly i katalogi, togda

    % set c = "*"
    % if( "$c" == "*" ) _____

      ili

    % if( "$c" =~ "*" ) _____

V pervom sluchae vyrazhenie vsegda lozhno - levaya stroka  zame-
nyaetsya  spiskom  imen  fajlov i katalogov, a pravaya ostaetsya
bez izmenenij (simvol *).  Vo vtorom  sluchae  stroki  vsegda
identichny - oni odinakovo interpretiruyutsya.

1.9.  Operatory yazyka C-shell

     YAzyk C-shell  vklyuchaet  sleduyushchie  operatory:  foreach,
switch,  while,  if_then_else, goto, continue, break, shift,
exit.  Operatory mozhno ispol'zovat' v  interaktivnom  rezhime
raboty interpretatora csh i v komandnom fajle.  Principial'-
nyh razlichij vypolneniya operatorov v interaktivnom rezhime  i
v komandnom fajle net.  Rassmotrim rabotu operatorov v inte-
raktivnom rezhime.  V processe vvoda operatora  interpretator
priglashaet  simvolom  ?  prodolzhat'  nabor, poka ne vstretit
klyuchevoe slovo,  oznachayushchee  konec  vvoda.  Vvedennyj  tekst
mozhno  rassmatrivat'  kak  vremennyj komandnyj fajl, kotoryj
interpretiruetsya i posle vypolneniya unichtozhaetsya.   Odno  iz
klyuchevyh  slov foreach, switch, while, if_then_else ili goto
dolzhno byt' pervym slovom v stroke.

Operator cikla foreach

         foreach imya (spisok slov)
                 ...
         end

     Peremennoj imya posledovatel'no  prisvaivayutsya  znacheniya
     kazhdogo  chlena spiska slov i vypolnyaetsya posledovatel'-
     nost' komand tela cikla foreach.  foreach i end  dolzhny
     nahodit'sya v otdel'nyh strokah



                           - 35 -










         % foreach i  ( a b c d e f g h )
         ?        if( "$i" == "c" ) continue
         ?        glob  "$i "
         ?        if( "$i" == "f" ) break
         ? end
         a b d e f %

     Peremennaya cikla i posledovatel'no  prinimaet  znacheniya
     iz  spiska,  ob®yavlennogo v predlozhenii foreach. Vnutri
     cikla stoyat dve proverki.  Esli znachenie i ravno c,  to
     perejti  k sleduyushchemu shagu cikla, esli znachenie i ravno
     f, to prekratit' vypolnenie  cikla.   V  pervom  sluchae
     operator  continue  trebuet  perehoda  k novoj iteracii
     cikla, vo vtorom - operator break osushchestvlyaet vyhod za
     predely  cikla,  i  ego dejstvie prekrashchaetsya.  Komanda
     glob rabotaet analogichno komande echo, no posle  vyvoda
     kursor  ostaetsya v toj zhe stroke, a ne v nachale sleduyu-
     shchej.

Operator vybora switch imeet vid:

         switch(vhodnaya_stroka)
                 case obrazec:
                         ...
                         breaksw
                 ...
                 default:
                         ...
                         ...
         endsw

     Obrazcy variantov case posledovatel'no  sravnivayutsya  s
     ukazannoj  v  switch  vhodnoj strokoj (v obrazcah mozhno
     ispol'zovat' shablony imen fajlov *, ? i [...]).  Esli v
     variante  case  vyyavleno  sovpadenie  obrazca i vhodnoj
     stroki, vypolnyayutsya vse stroki do  blizhajshego  breaksw,
     default  ili  endsw.   Esli  sovpadenie  ne obnaruzheno,
     vypolnenie prodolzhaetsya posle  default.   Esli  default
     otsutstvuet,   vypolnenie   prodolzhaetsya  posle  endsw.
     Slova case i default  dolzhny  byt'  pervymi  v  stroke.
     Vypolnenie  operatora  breaksw  privodit  k  tomu,  chto
     upravlenie peredaetsya na pervuyu stroku posle endsw













                           - 36 -










         % set j = 0
         % foreach i ( aaa bbb ccc ddd eee )
         ?       @ j++
         ?       switch( $i )
         ?               case "aaa":
         ?                       glob "$i "
         ?                       breaksw
         ?               case "bbb":
         ?                       glob "$i "
         ?                       breaksw
         ?               case "ccc":
         ?                       glob "$i "
         ?                       breaksw
         ?               case "ddd":
         ?                       glob "$i "
         ?                       breaksw
         ?               default:
         ?                       breaksw
         ?
         ?       endsw
         ?       glob "$j "
         ?end
         aaa 1 bbb 2 ccc 3 ddd 4 5 %

     Peremennoj cikla i prisvaivayutsya znacheniya iz  spiska  v
     predlozhenii  foreach.   Vnutri  cikla  rabotaet switch.
     Esli ni odno znachenie variantov case  ne  sovpadaet  so
     znacheniem peremennoj i, to vypolnyaetsya variant default.
     V dannom sluchae eto privodit k vyhodu za predely perek-
     lyuchatelya  switch,  poetomu  vyvoditsya  poryadkovyj nomer
     iteracii cikla i foreach vypolnyaet sleduyushchuyu  iteraciyu.
     V  novoj  iteracii  cikla  snova  nachinaet  dejstvovat'
     switch.

Operator if

         if(vyr1) then
            ...
         else if(vyr2) then
            ...
         else
            ...
         endif

     Esli znachenie vyr1 istinno (otlichno ot nulya),  vypolnya-
     yutsya komandy do pervogo else. Inache, esli znachenie vyr2
     istinno, vypolnyayutsya komandy do  vtorogo  else  i  t.d.
     Vozmozhno  lyuboe  kolichestvo  par  else  if, endif nuzhno
     tol'ko odno. CHast' else  neobyazatel'na.  Slova  else  i
     endif  dolzhny  byt' pervymi v strokah, gde oni ukazany.
     Operator if dolzhen nahodit'sya odin v stroke  ili  posle
     else



                           - 37 -










         % foreach i ( a b c d e f )
         ?        if( "$i" == "a" ) then
         ?                glob "a "
         ?        else if( "$i" == "b" ) then
         ?                glob "b "
         ?        else if( "$i" == "c" ) then
         ?                glob "c "
         ?        endif
         ? end
         a b c %

     Na kazhdoj iteracii cikla  foreach  osushchestvlyaetsya  pro-
     verka  tekushchego znacheniya peremennoj cikla i s simvolami
     'a', 'b' i vypolnyaetsya, to  na  ekran  vyvoditsya  soot-
     vetstvuyushchij simvol, inache osushchestvlyaetsya sleduyushchaya ite-
     raciya cikla.

Operator cikla while

         while(vyrazhenie)
                 ...
         end

     Cikl vypolnyaetsya, poka istinno znachenie vyrazheniya. Klyu-
     chevye  slova while i end dolzhny nahodit'sya na otdel'nyh
     strokah. V cikle mozhno ispol'zovat' komandu  break  dlya
     vyhoda  iz  cikla  i komandu continue dlya vozobnovleniya
     sleduyushchej iteracii cikla bez  zaversheniya  tekushchej  (vse
     operatory  cikla,  sleduyushchie  za  komandoj continue, ne
     budut vypolnyat'sya)

         % set argv = ( 1 2 3 1 2 3 0 1 )
         % while( $#argv > 0 )
         ?        if( "$argv[1]" == "3" ) then
         ?                shift
         ?                continue
         ?        endif
         ?        if( "$argv[1]" == "0" ) then
         ?                break
         ?        endif
         ?        glob " $argv[1]"
         ?        shift
         ? end
          1 2 1 2 %

     Zdes' vypolnyaetsya cikl, v  kotorom  vyvodyatsya  znacheniya
     argv.  Esli znachenie argv[1] est' simvol "3", to ono ne
     vyvoditsya i idet perehod k  sleduyushchej  iteracii  cikla,
     esli simvol "0", to dejstvie cikla prekrashchaetsya. Opera-
     tor shift osvobozhdaet (vytalkivaet) vershinu  steka  dlya
     sleduyushchego elementa. V dannom sluchae pod stekom ponima-
     etsya spisok slov massiva  argv.  Posle  kazhdogo  sdviga
     argv[1]  priobretaet  znachenie  sleduyushchego  slova. Cikl


                           - 38 -










     while prekrashchaet rabotu, kogda spisok slov massiva argv
     stanet pustym, t.e. $#argv stanet ravnym nulyu.

1.10.  Komandnye fajly

     Programmy,  napisannye  na  yazyke   C-shell,   nazyvayut
komandnymi  fajlami.  Kazhdaya stroka komandnogo fajla interp-
retiruetsya csh, v nej osushchestvlyayutsya  podstanovki,  vychislya-
yutsya,  esli  neobhodimo,  vyrazheniya.   Komandnyj  fajl mozhet
zapuskat' na vypolnenie  drugie  vypolnyaemye  fajly,  v  tom
chisle  komandnye fajly, napisannye dlya interpretatorov csh i
sh. Krome togo, v komandnom fajle  dostupna  dlya  vypolneniya
lyubaya komanda sistemy.

     Kazhdyj komandnyj fajl na  yazyke  C-shell  dolzhen  nachi-
nat'sya simvolom # v pervoj pozicii pervoj stroki, dalee uka-
zyvaetsya sistemnoe imya interpretatora.   Dopuskayutsya  pustye
stroki.   Stroka, nachinayushchayasya #, yavlyaetsya strokoj kommenta-
riev.  Pri sozdanii komandnyh fajlov, ispol'zuya   peremennuyu
argv, mozhno organizovat' vvod i obrabotku argumentov komand-
noj stroki, kotorye mogut byt' kak  imenami  fajlov,  tak  i
lyubymi  posledovatel'nostyami  simvolov.   V kachestve primera
rassmotrim programmu dialogovogo vvoda soderzhaniya dokumenta.
Kommentarii v programme dostatochno polno raskryvayut algoritm
raboty






























                           - 39 -










     #!/bin/csh
     # Programma v rezhime  menyu zaprashivaet
     # svedeniya o zagruzke |VM.   Rezul'tat
     # vvoda dopisyvaetsya  v  fajl  Result.
     # Ispravlenie oshibok vvoda vypolnyaetsya
     # povtornym  vvodom.  Zapis'  v   fajl
     # proishodit  po   komande  Zapomnit'.
     # Peremennaya   out   ispol'zuetsya  dlya
     # ukazaniya napravleniya vyvoda.   Kogda
     # out = /dev/tty vyvod dopisyvaetsya na
     # ekran  displeya,  kogda  out = Result
     # vyvod dopisyvaetsya v fajl ./Result.

     set |VM NOM ORG POD
     set out = /dev/tty
     set mes = ( 0 0 0 0 0 0 0 0 0 0 0 0 )
     set sum = ( 0 0 0 0 0 )

     # Imena mesyacev dlya podtverzhdeniya
     # rezhima vvoda

     set imya = ( YAnvar'   Fevral' Mart     \
                 Aprel'   Maj     Iyun'     \
                 Iyul'     Avgust  Sentyabr' \
                 Oktyabr'  Noyabr'  Dekabr'  )

     # Rabota   programmy   vypolnyaetsya   v
     # beskonechnom cikle while(1)

     while ( 1 )
             glob ' Ukazhite rezhim raboty > '
             set otvet =  $<&lt;
             switch( "$otvet" )

                     case '[KkKk]':
                             exit( 0 )

                     case '[ZzZz]':
                             set out = Result

                     case '[DdDd]':

     # Vychislenie pokazatelej po  kvartalam
     # i za god

     @ sum[1] = $mes[1]  +  $mes[2]  +  $mes[3]
     @ sum[2] = $mes[4]  +  $mes[5]  +  $mes[6]
     @ sum[3] = $mes[7]  +  $mes[8]  +  $mes[9]
     @ sum[4] = $mes[10] +  $mes[11] +  $mes[12]
     @ sum[5] = $sum[1]  +  $sum[2]  +  $sum[3]  +  $sum[4]

     # Ochishchat' ekran, esli vyvod ne  v fajl



                           - 40 -










                             if( "$out" != "Result" ) clear

     # Komanda   echo   vyvodit  v fajl out
     # znacheniya peremennyh

             echo "                 \
               Otchet o zagruzke |VM.\
                    |VM   $|VM      \
        Zavodskoj nomer   $NOM      \
            Organizaciya   $ORG      \
          Podrazdelenie   $POD      \
                 YAnvar'   $mes[1]   \
                Fevral'   $mes[2]   \
                   Mart   $mes[3]   \
         Pervyj kvartal   $sum[1]   \
                 Aprel'   $mes[4]   \
                    Maj   $mes[5]   \
                   Iyun'   $mes[6]   \
         Vtoroj kvartal   $sum[2]   \
                   Iyul'   $mes[7]   \
                 Avgust   $mes[8]   \
               Sentyabr'   $mes[9]   \
         Tretij kvartal   $sum[3]   \
                Oktyabr'   $mes[10]  \
                 Noyabr'   $mes[11]  \
                Dekabr'   $mes[12]  \
      CHetvertyj kvartal   $sum[4]   \
                  Itogo   $sum[5]   " >> $out
                            continue

                    case '[AaAa]':
                            glob 'Tip |VM: '
                            set |VM = $<&lt;
                            continue

                    case '[BbBb]':
                            glob 'Zavodskoj nomer |VM: '
                            set NOM = $<&lt;
                            continue

                    case '[VvWw]':
                            glob 'Organizaciya: '
                            set ORG = $<&lt;
                            continue

                    case '[GgGg]':
                            glob 'Podrazdelenie: '
                            set POD = $<&lt;
                            continue

                    case '[1-9]':
                    case "1[012]":
                            glob $imya[$otvet]': '


                           - 41 -










                            set  mes[$otvet] = $<&lt;
                            continue

                    default:
     # Vyvod menyu, esli rezhim ukazan nepravil'no.
                            echo 'Takogo rezhima net.'
                            clear
             echo  '                        \
                                            \
                                            \
                                            \
                                            \
                                            \
                  Rezhimy raboty:            \
                                            \
     a  Vvod naimenovaniya |VM.              \
     b  Vvod zavodskogo nomera |VM.         \
     v  Vvod naimenovaniya organizacii.      \
     g  Vvod naimenovaniya podrazdeleniya.    \
     d  Vyvod dannyh na ekran.              \
     z  Zapomnit'.                          \
     k  Konec raboty.                       \
        Vyvod zagruzki v chasah po mesyacam:  \
     1  YAnvar'    2  Fevral'    3  Mart     \
     4  Aprel'    5  Maj        6  Iyun'     \
     7  Iyul'      8  Avgust     9  Sentyabr' \
    10  Oktyabr'  11  Noyabr'    12  Dekabr'  \
                                            \
                    '
            endsw
     end

Nizhe pokazano soderzhimoe  fajla  Result,  kotoryj  formiruet
programma. |ta zhe informaciya vyvoditsya na ekran, esli ukazan
rezhim Vyvod dannyh




















                           - 42 -










           Otchet o zagruzke |VM.
                |VM   SM 1420
    Zavodskoj nomer   1673
        Organizaciya   Poliklinika 124
      Podrazdelenie   IVC
             YAnvar'   300
            Fevral'   350
               Mart   350
     Pervyj kvartal   1000
             Aprel'   520
                Maj   330
               Iyun'   700
     Vtoroj kvartal   1550
               Iyul'   200
             Avgust   150
           Sentyabr'   250
     Tretij kvartal   600
            Oktyabr'   300
             Noyabr'   310
            Dekabr'   280
  CHetvertyj kvartal   890
              Itogo   4040


     CHasto  voznikaet  neobhodimost'  prinyat'  s  klaviatury
otvet  v  vide  metasimvola, kotoryj ne dolzhen interpretiro-
vat'sya.  |togo mozhno dostignut' otmenoj special'nogo  znache-
niya  simvola.   V  otdel'nyh  sluchayah takaya otmena zatrudni-
tel'na. Nizhe priveden primer programmy, v kotoroj  so  stan-
dartnogo vvoda chitayutsya metasimvoly shablonov imen fajlov, no
ih special'noe znachenie ignoriruetsya.
























                           - 43 -










     # !/bin/csh
     # programma demonstriruet  sposob chteniya
     # so standartnogo vvoda simvolov  ? i *,
     # kotorye  obychno  rassmatrivayutsya   kak
     # shablony imen fajlov i interpretiruyutsya
     #
     while( 1 )
             glob '=> '
             set otvet = "$<&lt;"

             switch( "$otvet" )

                     case [?] :
                             echo 'Voprositel'nyj znak'
                             breaksw

                     case [*] :
                             echo 'Zvezdochka'
                             breaksw

                     case '{' :
                     case '}' :
                             echo 'Figurnaya skobka'
                             breaksw

                     default :
                             echo 'Drugoj simvol'

             endsw
     end


1.11.  Protokolirovanie, sredstva raboty s protokolom

     Interpretator zapisyvaet  vo  vremennyj  fajl  protokol
raboty  pol'zovatelya  v  vide  spiska  vypolnennyh komandnyh
strok.  Kolichestvo zapominaemyh komandnyh strok opredelyaetsya
peremennoj  history,  kotoraya  obychno  opredelyaetsya  v fajle
~/.cshrc (o nem budet skazano nizhe).  Esli ustanovlena  pre-
dopredelennaya  peremennaya  savehist, to po zaversheniyu seansa
raboty pol'zovatelya ukazannoe kolichestvo strok history budet
sohraneno  v fajle ~/.history. Pri sleduyushchem vhode v sistemu
soderzhimoe etogo fajla ispol'zuetsya dlya zaneseniya  v  proto-
kol.  Naprimer, esli vypolnena komanda

    set savehist = 22

to poslednie 22 stroki protokola  budut  sohraneny  v  fajle
~/.history   i  vosstanovleny  v  nachale  sleduyushchego  seansa
raboty.  CHtoby  napechatat'  protokol,  neobhodimo  vypolnit'
komandu  history.   Kazhdaya stroka protokola imeet nomer, chto
pozvolyaet zapustit' ee na  vypolnenie,  ukazyvaya,  naprimer,
sootvetstvuyushchij  nomer.   Vosklicatel'nyj  znak  v komandnoj


                           - 44 -










stroke sluzhit ukazaniem dlya interpretatora, chto vse  ukazan-
noe dalee do razdelitelya otnositsya k nekotoroj stroke proto-
kola.  Vosklicatel'nyj znak mozhno ukazat'  v  nachale  ili  v
lyubom drugom meste komandnoj stroki.  Pust' posle vypolneniya
komandy history na ekran displeya vyveden sleduyushchij protokol:

    1  cat file1
    2  pr -w39 -l24 -2 file1
    3  cc program.c >&gt;& errors &
    4  cat errors
    5  ed program.c
    6  history

togda, ispol'zuya vosklicatel'nyj znak, mozhno  vypolnit'  ryad
dejstvij:

!2
     vypolnitsya vtoraya stroka protokola;

!!
     vypolnitsya poslednyaya stroka protokola:

!-2
     vypolnitsya chetvertaya stroka (vtoraya ot poslednej);

!cat ili  !c
     vypolnitsya chetvertaya stroka.  Interpretator  prosmatri-
     vaet stroki protokola snizu i vypolnyaet pervuyu, v koto-
     roj najdena posledovatel'nost' simvolov  (cat  ili  c),
     stoyashchaya v nachale stroki;

!{cat}.a1
     vypolnitsya komanda cat errors.a1 - k  najdennoj  stroke
     dopisyvaetsya .a1;

!?gram?
     vypolnitsya pyataya stroka protokola.  Interpretator vybe-
     ret dlya vypolneniya etu stroku, tak kak v nej budet naj-
     den shablon gram. Zdes' simvoly ?  vydelyayut  shablon,  po
     kotoromu osushchestvlyaetsya poisk;

cat !5* !1*
     vypolnitsya komanda cat program.c file1 - budut podstav-
     leny  slova  pyatoj  i  pervoj strok protokola, isklyuchaya
     pervye slova etih strok.


     Mozhno vybirat' otdel'nye slova v strokah protokola  dlya
vklyucheniya  ih  v  komandnuyu  stroku.  Slova komandnoj stroki
numeruyutsya, nachinaya s 0.  Slovo s nomerom  0  -  obychno  imya
komandy.  Slovo mozhno vydelit' s pomoshch'yu opredelitelya, pered
kotorym neobhodimo ukazat' simvol dvoetochie, naprimer



                           - 45 -










       cat !3:1

Iz tret'ej komandnoj stroki protokola budet vybrano slovo  s
nomerom 1, poluchim

       cat program.c

Rassmotrim podrobnee opredeliteli slov v  komandnyh  strokah
protokola:

  *   ili   n*   ili  n-m
     vybrat' vse slova, nachinaya so slova s  nomerom  1,  ili
     vybrat'  vse  slova,  nachinaya so slova s nomerom n, ili
     vybrat' vse slova, nachinaya so slova s nomerom n i  kon-
     chaya slovom s nomerom m;

  n  ili  n-,  ili  -n
     vybrat' slovo s nomerom n, ili vybrat' vse slova, nachi-
     naya  so  slova  s  nomerom n, ne vklyuchaya poslednee, ili
     vybrat' vse slova, nachinaya so  slova  s  nomerom  0  do
     slova s nomerom n;

  ?shablon?:%
     vybrat' slovo, sootvetstvuyushchee shablonu;

  ^  ili  $
     slovo s nomerom 1 ili poslednee slovo komandnoj stroki.


     Razreshaetsya ne  ukazyvat'  dvoetochie  pered  sleduyushchimi
opredelitelyami:

        ^     $    *   -   %

Rassmotrim primer.  Pust' posle vypolneniya  komandy  history
na ekran displeya vyveden protokol:

     1  cat file1 file2 file3
     2  pr -w39 -l24 -2 file1 file5
     3  cc -o program1.c program2.c >&gt;& errors &
     4  cat errors
     5  ed program2.c
     6  history

togda interpretator csh vypolnit komandy, osushchestvlyaya  pods-
tanovki sleduyushchim obrazom:

!5:0  !1:3
     iz pyatoj stroki vybiraetsya slovo  s  nomerom  0  (  imya
     komandy  ), iz pervoj stroki vybiraetsya slovo s nomerom
     3. Vypolnitsya komanda ed file3;




                           - 46 -










!5:0  !1$
     iz pyatoj stroki vybiraetsya slovo s nomerom 0, iz pervoj
     stroki - poslednee slovo. Vypolnitsya komanda ed file3;

!2:-3   !3:2-3
     iz stroki 2 vybirayutsya slova s nomerami ot 0 do 3 vklyu-
     chitel'no,  iz  stroki 3 vybirayutsya slova s nomerami 2 i
     3. Vypolnitsya komanda:

         pr -w39 -l24 -2 program1.c program2.c


!2-3    !?prog?%
     vypolnitsya komanda:

         pr -w39 -l24 -2 program2.c



     Posle neobyazatel'nogo  opredelitelya  mogut  ukazyvat'sya
modifikatory  slov, kotorye pozvolyayut vypolnit' ryad preobra-
zovanij nad slovom, i ono podstavlyaetsya v  komandnuyu  stroku
modificirovannym.  Modifikatory  peremennyh byli rassmotreny
vyshe.  V dejstviyah so strokami protokola mozhno  ispol'zovat'
i drugie modifikatory:

p
     raspechatat' novuyu komandu, no ne vypolnyat' ee;

&
     povtorit' predydushchyuyu podstanovku;

s/obrazec_1/obrazec_2/
     zamenit' obrazec_1 na obrazec_2.  Simvol / mozhno  zame-
     nit'  na  lyuboj,  otsutstvuyushchij v obrazcah.  Esli obra-
     zec_2 pustaya stroka, to obrazec_1 udalyaetsya.


     Pered kazhdym modifikatorom neobhodimo  stavit'  dvoeto-
chie.  Esli imeetsya opredelitel' slova, to modifikator dolzhen
sledovat' za nim.  Pust' posle vypolneniya komandy history na
ekran displeya vyvedeno:

     1  cat /usarc/gruppa/ivanov/file1.c
     2  pr  /usarc/gruppa/ivanov/file1.c
     3  cc pa1.c pa2.c pa3.c pa4.c >&gt;& errors &
     4  cat errors
     5  ed program.c
     6  history

togda interpretator vypolnit  komandy,  osushchestvlyaya  podsta-
novki i modifikacii, sleduyushchim obrazom:



                           - 47 -










!1:0  !1^:t:r
     vybiraet iz stroki s nomerom 1 slovo s nomerom 0,  t.e.
     imya  komandy,  v  dannom  sluchae cat. Dalee vybiraet iz
     pervoj stroki slovo s nomerom 1, v  dannom  sluchae  eto
     /usarc/gruppa/ivanov/file1.c.   Modifikator t udalit iz
     etogo slova imena katalogov, v dannom sluchae  udalyaetsya
     /usarc/gruppa/ivanov, i slovo teper' budet imenem fajla
     file1.c. Modifikator r udalit rasshirenie  imeni  fajla.
     Takim obrazom, vypolnitsya komanda cat file1.

!1:0  !1^:h/document
     po opredelitelyu ^ budet  vybrano  pervoe  slovo  pervoj
     stroki, modifikator h udalit iz nego imya fajla, ostaviv
     imena katalogov, vedushchih k nemu, i vypolnitsya komanda

         cat /usarc/gruppa/ivanov/document


!1:0  !1^:h:s?ivanov?sidorov?/document
     iz pervogo slova pervoj stroki vybirayutsya imena katalo-
     gov,  vedushchih  k  fajlu,  zatem  modifikator  s zamenit
     ivanov na sidorov i vypolnitsya komanda

         cat /usarc/gruppa/sidorov/document


!1:0 !1^:h:s?ivanov?sidorov?/doc !1^:&:p
     pervye dva slova komandnoj stroki dejstvuyut  analogichno
     predydushchemu  primeru. Tret'e slovo vybiraet iz 1 stroki
     protokola slovo  s  nomerom  1,  v  nem  osushchestvlyaetsya
     zamena  ( modifikator & ), analogichnaya predydushchej, t.e.
     vypolnyaetsya  zamena  ?ivanov?sidorov?,   sohraniv   vse
     ostal'noe v etom slove. Stroka ne vypolnyaetsya, a tol'ko
     vyvoditsya na ekran (modifikator p):

         cat /usarc/gruppa/sidorov/doc \
         /usarc/gruppa/sidorov/file1.c


!1:0 !3:1-4:gs?pa?ff?:p
     imya komandy vybiraetsya iz pervoj stroki protokola, iz 3
     stroki  vybirayutsya vse slova s nomerami ot 1 do 4 vklyu-
     chitel'no i v nih  global'no  (modifikator  g)  delaetsya
     zamena  ?pa?ff?  .  Komanda budet napechatana, no vypol-
     nyat'sya ne budet (modifikator p):

         cat ff1.c ff2.c ff3.c ff4.c


     Sushchestvuet takzhe udobnoe sredstvo  redaktirovaniya  pos-
lednej stroki protokola.  Dlya etih celej ispol'zuetsya konst-
rukciya ^shablon^zamena^.  Dopustim,  poslednyaya  stroka  imeet
vid  cat  aaa  bbb ccc ddd, togda posle komandy ^ccc^file.c^


                           - 48 -










budet vypolnena zamena: cat aaa file.c ccc ddd.

     Imeetsya  vozmozhnost'  vvesti  kratkie  oboznacheniya  dlya
komandnyh  strok. |ti kratkie oboznacheniya nazyvayut psevdoni-
mami komand. Esli dlya kakoj-libo komandnoj stroki ustanovlen
psevdonim,  to ee vypolnenie teper' mozhno osushchestvlyat', uka-
zyvaya psevdonim, a ne vsyu stroku. Dopustim, imeetsya  komand-
naya stroka

      alias sp "sort \!* | print"

togda komandnye stroki

      sort file1 file2 | print

    i

      sp file1 file2

tozhdestvenny.  Vmesto !* v komandnuyu stroku  budut  podstav-
leny imena fajlov ili klyuchi komandy sort, ukazannye za psev-
donimom sp.

     Interpretator komand vedet spisok psevdonimov,  kotorye
mogut  ustanavlivat'sya,  otobrazhat'sya  i  modificirovat'sya s
pomoshch'yu komand alias  i  unalias.   Komandnaya  stroka  posle
prosmotra  razbivaetsya  na  otdel'nye  slova,  kazhdoe slovo,
interpretiruemoe kak imya komandy, proveryaetsya,  chtoby  vyyas-
nit', imeet li ono psevdonim.  Esli da, eto slovo zamenyaetsya
na znachenie psevdonima.  Vsyudu v komandnyh strokah pri  soz-
danii  psevdonimov simvol ! neobhodimo ekranirovat'.  V pro-
tivnom sluchae on budet interpretirovat'sya  kak  obrashchenie  k
protokolu.  Psevdonimy mozhno ustanavlivat' i na komandy csh,
naprimer

    alias a alias

ustanavlivaet psevdonim na komandu alias.

1.12.  Peremennye interpretatora csh

     Interpretator csh  operiruet  peremennymi  dvuh  vidov:
vnutrennimi i vneshnimi.  Vnutrennie peremennye ustanavlivayut
rezhim raboty interpretatora, a vneshnie v osnovnom  otnosyatsya
k komandnym strokam, kotorye im interpretiruyutsya.  Obrashchenie
k peremennym mozhet byt' prostym (ustanovlena peremennaya  ili
net)  i  slozhnym.   Naprimer,  peremennaya  argv predstavlyaet
obraz spiska parametrov komandnoj stroki, a peremennaya  ver-
bose  yavlyaetsya  klyuchom  i  sushchestvenno  lish'  ee nalichie ili
otsutstvie.  Osoboe mesto zanimayut tak nazyvaemye peremennye
okruzheniya.  Interpretator schityvaet ih znacheniya pri zapuske.
Znacheniya peremennyh okruzheniya stanovyatsya  vnutrennimi  kons-
tantami interpretatora i ih mozhno ispol'zovat' kak konstanty


                           - 49 -










v komandnyh strokah i komandnyh fajlah.   Kazhdaya  vnutrennyaya
peremennaya  imeet  opredelennyj  smysl  dlya  interpretatora.
CHast' vnutrennih peremennyh vsegda ustanavlivaetsya interpre-
tatorom  pri  inicializacii libo pri zapuske-zavershenii pro-
cessov. Posle chego  peremennye  ne  budut  modificirovat'sya,
esli  etogo  ne  sdelaet  pol'zovatel'.  K chislu  vnutrennih
peremennyh otnosyatsya: argv, cdpath, cwd, home, path, prompt,
shell.   Peremennye  child   i  status  ustanavlivayutsya  pri
porozhdenii processov i sohranyayut svoe znachenie do  poyavleniya
novyh.  Znacheniya peremennyh ustanavlivayutsya komandoj set ili
klyuchom pri vyzove csh. Isklyuchit' peremennuyu iz chisla oprede-
lennyh  mozhno  komandoj unset.  Nizhe privoditsya spisok vnut-
rennih peremennyh i ih naznachenie.

argv
     predstavlyaet stroku parametrov. K nej primenimy podsta-
     novki pozicionnyh parametrov.

cdpath
     etoj peremennoj prisvaivaetsya spisok imen katalogov,  k
     kotorym pol'zovatel' chasto budet obrashchat'sya.  Dopustim,
     cdpath opredelena sleduyushchim obrazom:  set  cdpath  =  (
     /usr/include  /usr/lib  ), togda komanda chdir sys tozh-
     destvenna komande chdir /usr/include/sys.

checktime
     esli eta peremennaya ustanovlena i esli v  techenie  uka-
     zannogo  vremeni ne vypolnyalos' kakih-libo dejstvij, to
     vypolnyaetsya  exit.  Dopustim,  vypolnena  komanda   set
     checktime  = 3, togda, esli v techenie 3 min ne vypolnya-
     lis' kakie-libo dejstviya, vypolnyaetsya exit, i interpre-
     tator prekrashchaet rabotu.

child
     nomer processa. Vyvoditsya na ekran displeya pri  zapuske
     parallel'nogo processa. Znachenie peremennoj child sbra-
     syvaetsya, kogda etot process zavershaetsya.

cwd
     znacheniem etoj peremennoj yavlyaetsya stroka -  polnoe imya
     rabochego kataloga.  |to imya mozhet ne sovpadat' s istin-
     nym, esli ustanovlen symlink.

echo
     vyzyvaet pechat' kazhdoj komandy pered  vypolneniem.  Vse
     podstanovki  vypolnyayutsya  pered  vyvodom.   Rezhim  echo
     mozhno ustanovit' libo na  vse  vremya  raboty,  libo  na
     period  vypolneniya  odnogo komandnogo fajla.  Naprimer,
     csh -x comfile ustanovit rezhim echo na vremya vypolneniya
     komandnogo  fajla  comfile, a komanda set echo - na vse
     vremya raboty interpretatora.




                           - 50 -










history
     chislennoe znachenie etoj peremennoj ustanavlivaet  koli-
     chestvo  strok,  kotoroe neobhodimo hranit' v protokole.
     Dlya slishkom  bol'shogo  chisla  strok  mozhet  ne  hvatit'
     pamyati.  Optimal'noe chislo - 22 stroki.

home
     registracionnyj katalog pol'zovatelya.  Ego imya schityva-
     etsya pri zapuske csh iz peremennoj okruzheniya HOME.

ignoreeof
     predotvrashchaet sluchajnoe zavershenie  raboty  interpreta-
     tora po priznaku konec fajla. |tot priznak vyglyadit kak
     SU/D ili CTRL/D pri vvode s klaviatury displeya. Priznak
     konca  fajla  mozhno zamenit' na drugoj komandoj sistemy
     stty(1).

mail
     imya fajla, v kotoryj budet postupat' pochta.

noclobber
     ustanavlivaet zashchitu fajlov ot sluchajnogo razrusheniya.

noglob
     zapretit' rasshirenie imen fajlov.

nonomatch
     obychno, esli ukazannomu shablonu (naprimer,  echo  *.[2-
     5])  ne sootvetstvuet ni odin obrazec, porozhdaetsya sos-
     toyanie oshibki.  Esli ustanovlena peremennaya  nonomatch,
     sostoyanie oshibki ne voznikaet, a ukazannyj shablon vozv-
     rashchaetsya programme.

notify
     asinhronno vyvodit' soobshcheniya o sostoyaniyah  vypolnyaemyh
     processov.  Esli  peremennaya notify ne ustanovlena, eti
     soobshcheniya vyvodyatsya pered vyvodom novogo priglasheniya.

path
     opredelyaet imena  katalogov,  v  kotoryh  interpretator
     budet  iskat'  fajly komand, zapuskaemyh na vypolnenie.
     Pri zapuske interpretatora sozdaetsya hesh-tablica komand
     iz katalogov, ukazannyh v path. Heshirovanie sushchestvenno
     sokrashchaet vremya poiska komandy  pri  ee  zapuske.  Esli
     posle  vhoda  v sistemu, t.e. posle heshirovaniya katalo-
     gov, budet zapisana v odin iz nih novaya komanda, to ona
     budet  otsutstvovat' v hesh-tablicah, i interpretator ne
     budet ee obnaruzhivat'.  Dlya  razresheniya  etoj  situacii
     neobhodimo  vypolnit' komandu rehash. Po komande rehash
     budut perestroeny hesh-tablicy, i  novye  komandy  budut
     dostupny.   Pri  zapuske  novogo  interpretatora  snova
     chitaetsya fajl ~/.cshrc i stroitsya hesh-tablica.  Na  etu
     operaciyu  uhodit  dostatochno mnogo vremeni i, esli est'


                           - 51 -










     neobhodimost' bolee bystrogo starta, pri zapuske  neob-
     hodimo ispol'zovat' klyuch -f

         csh -f comfile

     Perestrojka hesh-tablic osushchestvlyaetsya takzhe vsyakij raz,
     kogda  s  pomoshch'yu komandy set izmenyaetsya znachenie pere-
     mennoj path.

prompt
     soderzhit stroku simvolov, kotoraya vyvoditsya v  kachestve
     priglasheniya.  Esli eta stroka simvolov vklyuchaet voskli-
     catel'nyj znak,  na  ego  mesto  podstavlyaetsya  tekushchij
     nomer komandnoj stroki. Esli peremennaya prompt ne usta-
     novlena, pechataetsya priglashenie % dlya ryadovogo  pol'zo-
     vatelya i # dlya superpol'zovatelya.

shell
     soderzhit imya interpretatora,  kotoryj  zapuskaetsya  pri
     vhode  pol'zovatelya v sistemu.  Imya interpretatora uka-
     zano v peremennoj sredy SHELL i  schityvaetsya  v  nachale
     seansa.

status
     prinimaet znachenie koda zaversheniya komandy, naprimer:

         % false ; echo $status
         1
         % true ; echo $status
         0

     Zdes' komanda  false  vozvrashchaet  1  -  kod  neudachnogo
     zaversheniya,  komanda  true  vozvrashchaet 0 - kod udachnogo
     zaversheniya.

time
     hronometriruet vypolnenie komandnyh strok.  Esli vypol-
     nenie prodolzhalos' dol'she ukazannogo vremeni, vyvodyatsya
     rezul'taty  hronometrirovaniya.    Naprimer,   v   fajle
     ~/.cshrc vypolneno naznachenie set time = 6, eto znachit,
     chto interpretator budet vyvodit' rezul'taty hronometri-
     rovaniya, kogda vremya vypolneniya komandnoj stroki prevy-
     sit 6 s. Esli teper' vypolnit' komandu, naprimer,  sort
     file,  to  posle  ee zaversheniya budet vyveden rezul'tat
     hronometrirovaniya:

         1.6u 17.9s 0:26 74%

     Zdes': 1.6u -  vremya  pol'zovatel'skoj  fazy  processa;
     17.9s  - vremya sistemnoj fazy processa; 0:26 - astrono-
     micheskoe vremya processa; 74% -  otnoshenie  v  procentah
     summy  pol'zovatel'skoj i sistemnoj faz processa k ast-
     ronomicheskomu vremeni.


                           - 52 -










verbose
     ustanavlivaet rezhim raspechatki slov  kazhdoj  komandy  s
     uchetom   podstanovok.   |tot  rezhim  mozhno  ustanovit',
     ispol'zuya klyuch -v pri zapuske interpretatora na  vypol-
     nenie.


     Pri zapuske komandnyh fajlov mozhno  ustanavlivat'  raz-
lichnye  klyuchi.  Pri etom komandnaya stroka vyglyadit sleduyushchim
obrazom:

    csh -spisok_klyuchej imya_fajla ...

Esli imya_fajla ne ukazano, to porozhdaetsya novaya  interaktiv-
naya obolochka.

     Nizhe perechisleny klyuchi interpretatora i ih znacheniya:

-c   schitat' komandu iz edinstvennogo parametra,  ukazannogo
     srazu posle -c;

-e   interpretator prekrashchaet rabotu, esli  lyubaya  vyzvannaya
     komanda zavershaetsya nenormal'no (kod vozvrata ne 0);

-f   zapretit' chtenie  fajla  ~/.cshrc  dlya  bolee  bystrogo
     starta;

-i   zapustit' novuyu obolochku kak interaktivnuyu.  Esli vyzov
     interpretatora  osushchestvlyaetsya  s  klaviatury  displeya,
     etot klyuch ustanavlivaetsya po umolchaniyu;

-n   osushchestvlyat' razbor komandnyh strok,  no  ne  vypolnyat'
     komandy. |to rezhim otladki;

-s   chitat' iz standartnogo vvoda;

-t   schityvat' i vypolnyat' tol'ko odnu  stroku.  |ta  stroka
     mozhet soderzhat' v konce simvol prodolzheniya stroki \;

-v   posle  podstanovok  iz  protokola  raspechatat'  komandu
     pered ee vypolneniem;

-V   pered razborom strok  iz  fajlov  ~/.cshrc  i  ~/.login
     ustanovit'  klyuch  -v.   |to  pozvolit uvidet' na ekrane
     displeya, kak interpretator ustanavlivaet  naznacheniya  i
     vypolnyaet  komandnye stroki pri interpretacii etih faj-
     lov;

-x   pechatat' na ekrane displeya vse komandy  pered  vypolne-
     niem;

-X   ustanovit' klyuch -x pri interpretacii fajlov ~/.cshrc  i
     ~./login.


                           - 53 -










     Vneshnie peremennye  -  eto  takie  peremennye,  kotorye
ustanavlivayutsya  i  ispol'zuyutsya  tol'ko  pol'zovatelem.   V
otlichie ot  vnutrennih  peremennyh  i  peremennyh  okruzheniya
vneshnie  peremennye  imeyut  tot  smysl, kotoryj pridaetsya im
pol'zovatelem.  Znacheniya vneshnih peremennyh mogut byt' usta-
novleny i otobrazheny komandoj set i otmeneny komandoj unset.

     Sistema podderzhivaet massiv peremennyh,  kotoryj  nazy-
vayut  peremennymi sredy ili okruzheniya.  Peremennye okruzheniya
ispol'zuyutsya  sistemnymi  i  pol'zovatel'skimi  programmami.
Dlya  ustanovki  znachenij  peremennyh  okruzheniya ispol'zuetsya
komanda setenv, dlya otmeny - komanda unsetenv.  Imeetsya nes-
kol'ko  standartnyh  imen  peremennyh okruzheniya, ih znacheniya
zavisyat ot sootvetstvuyushchih naznachenij komandoj setenv. CHast'
etih  naznachenij  proishodit  pri  otkrytii  seansa  raboty.
Pol'zovatel'  imeet  vozmozhnost'   pereustanovit'   znacheniya
sushchestvuyushchim   peremennym,  ob®yavit'  i  prisvoit'  znacheniya
novym.  Znacheniya standartnyh peremennyh okruzheniya  ispol'zu-
yutsya  mnogimi sistemnymi programmami. Oni dostupny kak kons-
tanty i programmam pol'zovatelya.  Vazhno otmetit', chto znache-
niya  peremennyh  okruzheniya  yavlyayutsya vnutrennimi konstantami
interpretatora.  Perechislennye  nizhe  imena  zarezervirovany
kak standartnye imena peremennyh okruzheniya:

PATH
     imena standartnyh katalogov, razdelennyh dvoetochiem;

HOME
     registracionnyj katalog pol'zovatelya,  ustanovlennyj  v
     fajle /etc/passwd;

TERM
     imya tipa terminala;

TERMCAP
     stroka  opredeleniya  vozmozhnostej  displeya   iz   fajla
     /etc/termcap;

SHELL
     imya interpretatora komandnogo yazyka, kotoryj  iniciali-
     ziruetsya pri vhode pol'zovatelya v sistemu;

MSG
     opredelyaet, na kakom yazyke budut  vyvodit'sya  soobshcheniya
     pol'zovatelyu  pri rabote s sistemoj (MSG = r - na russ-
     kom, MSG = l - na anglijskom);

USER
     registracionnoe imya pol'zovatelya.


     Komanda unsetenv udalyaet dobavlennye  vo  vremya  raboty
peremennye  okruzheniya.   Komanda setenv pozvolyaet ob®yavit' i


                           - 54 -










prisvoit' znachenie novoj peremennoj okruzheniya

    % setenv NAME 15
    % echo $NAME
    15
    % @ a = ( $NAME + 15 )
    % echo $a
    30
    % setenv NAME "Jan Feb Mar Apr"
    % echo $NAME
    Jan Feb Mar Apr


     Peremennye okruzheniya otlichayutsya ot peremennyh interpre-
tatora tem, chto oni ne vliyayut na rabotu interpretatora.

1.13.  Special'nye fajly

     V  registracionnom  kataloge  pol'zovatelya  razmeshchaetsya
neskol'ko   special'nyh   fajlov:   ~/.hushlogin,  ~/.login,
~/.cshrc, ~/.logout i ~/.history.

     Fajl ~/.hushlogin pustoj i ispol'zuetsya kak klyuch.  Esli
on  sushchestvuet,  pri  otkrytii seansa raboty ne vyvoditsya na
ekran displeya /etc/motd - fajl s tekstom soobshcheniya administ-
ratora.   Obychno  v  fajle  /etc/motd soderzhat'sya svedeniya o
versii sistemy, "vyveska" organizacii i t.d.

     Pri otkrytii seansa raboty interpretator  chitaet  fajly
~/.login   i  ~/.cshrc,  a  pri  zavershenii  raboty  -  fajl
~/.logout.  Pri vhode pol'zovatelya v sistemu pervym chitaetsya
fajl ~/.cshrc, potom ~/.login.  Esli v registracionnom kata-
loge imeetsya fajl ~/.history, to on schityvaetsya v  protokol.
Vse perechislennye fajly, krome ~/.history, yavlyayutsya obychnymi
komandnymi fajlami, v kotoryh programmist  opredelyaet  zhela-
tel'nye dlya sebya dejstviya po vhodu i vyhodu iz sistemy.

     Fajl ~/.login opredelyaet te dejstviya,  kotorye  neobho-
dimo  vypolnit'  v  nachale  seansa raboty pol'zovatelya. Nizhe
priveden primer takogo fajla:

    set ignoreeof
    set prompt = 'Ivanov I.I._\!> '
    if( $?MAIL ) set mail = $MAIL
    msgs
    setenv MSG r


     V pervoj stroke ustanavlivaetsya klyuch ignoreeof, kotoryj
predotvrashchaet sluchajnoe zavershenie raboty interpretatora pri
nabore na klaviature displeya simvola SU/D (CTRL/D).




                           - 55 -










     Vo vtoroj stroke ustanavlivaetsya  priglashenie,  kotoroe
budet  vydavat'sya  pri  gotovnosti  prinyat'  novuyu komandnuyu
stroku. Zdes' vmesto \! budut podstavlyat'sya  tekushchie  nomera
strok history, naprimer :

    Ivanov I.I._15>


     V tret'ej stroke ukazyvaetsya imya pochtovogo fajla.  Esli
on  budet  ne pust, to na ekrane displeya poyavitsya soobshchenie:
"U Vas est' novaya  pochta  ".   |ti  opredeleniya  sushchestvenno
zavisyat ot versii programmy mail, ustanovlennoj v sisteme.

     V chetvertoj stroke zapisano obrashchenie k  komande  msgs,
kotoraya  vydaet  novye  informacionnye soobshcheniya pri vhode v
sistemu (eti soobshcheniya zanosyatsya administratorom,  soprovozh-
dayushchim operacionnuyu sistemu).

     V pyatoj stroke  opredelyaetsya  peremennaya  MSG,  kotoraya
opredelyaet  yazyk  diagnostik (v dannom sluchae - russkij, dlya
anglijskogo ukazyvetsya bukva l).

     Pri zavershenii seansa raboty chitaetsya fajl ~/.logout  i
vypolnyayutsya  ukazannye v nem dejstviya. Spisok takih dejstvij
zavisit isklyuchitel'no ot  fantazii  programmista.   V  fajle
~/.logout  mozhno  razmestit' vse komandy, kotorye neobhodimo
vypolnit' po vyhodu iz sistemy. Vazhno  otmetit',  chto,  nes-
motrya  na vyhod pol'zovatelya iz sistemy, vse processy, zapu-
shchennye im kak asinhronnye, budut prodolzhat' vypolnyat'sya.

     Pri kazhdom vyzove csh vypolnyaet  fajl  ~/.cshrc.   Nizhe
priveden primer fajla ~/.cshrc:

    set path = ( . /bin /usr/bin /usr/ucb )
    set history = 22
    set savehist = 22
    set checktime = 3
    set prompt = 'IVANOV I.I._\!> '
    alias  h  history
    alias  c /bin/cat
    alias  l /bin/ls -l


set path = (. /bin /usr/bin /usr/ucb)
     ustanavlivaet te katalogi, gde csh budet iskat' komandy
     pered zapuskom ih na vypolnenie.

set history = 22
     ustanavlivaet  kolichestvo  poslednih  komandnyh  strok,
     kotorye dolzhny sohranyat'sya v protokole.

set savehist = 22
     ustanavlivaet  kolichestvo  strok   protokola,   kotoroe


                           - 56 -










     neobhodimo  zapomnit'  v  fajle ~/.history. Pri vhode v
     sistemu etot fajl budet prochitan i zapisan v protokol.

set checktime = 3
     ustanavlivaet vremya (3 min),  v  techenie  kotorogo  csh
     mozhet  "bezdejstvovat'". Esli v techenie ukazannogo vre-
     meni  ne  budut  vypolnyat'sya  kakie-libo  dejstviya,  to
     vypolnyaetsya  komanda  exit  i  csh  prekrashchaet  rabotu.
     Takoe zavershenie  raboty  polezno,  kogda  pol'zovatelyu
     neobhodimo otluchit'sya.

set prompt = 'IVANOV I.I._\!>'
     ustanavlivaet priglashenie, kotoroe budet  vyvodit'  csh
     pri  porozhdenii novogo ekzemplyara interpretatora.  Sim-
     voly etogo priglasheniya  special'no  nabrany  zaglavnymi
     bukvami, chtoby u pol'zovatelya byla vozmozhnost' otlichit'
     osnovnoj  ekzemplyar  interpretatora   ot   porozhdennogo
     novogo.


     Ostal'nye komandy demonstriruyut vozmozhnost' ispol'zova-
niya psevdonimov komand.  Zametim, chto fajl ~/.login vypolnya-
etsya tol'ko odin raz - v nachale  seansa  raboty  v  sisteme;
fajl ~/.cshrc vypolnyaetsya pri zapuske kazhdoj novoj obolochki.

1.14.  Vstroennye komandy i operatory

     Nizhe perechisleny imena vstroennyh komand, ih  sintaksis
i dejstvie.

 alias
 alias imya
 alias imya spisok_slov


     komanda alias pozvolyaet ustanavlivat' psevdonimy komand
     i komandnyh strok. Pri obrashchenii k komandam ili komand-
     nym strokam, dlya kotoryh vypolnena komanda alias, mozhno
     ispol'zovat' ih psevdonimy.  Pervaya forma raspechatyvaet
     vse  psevdonimy,  vtoraya  -  psevdonim  dlya  ukazannogo
     imeni, esli on ustanovlen, tret'ya ustanavlivaet psevdo-
     nim dlya zadannogo spiska slov. V spiske  slov  vypolnya-
     yutsya podstanovki.

alloc
     pokazyvaet  razmer  ispol'zuemoj  dinamicheskoj  pamyati,
     vklyuchaya  ispol'zuemuyu i svobodnuyu pamyat', a takzhe adres
     poslednej  yachejki  pamyati.  Ispol'zuetsya  dlya   otladki
     interpretatora.

      bg
      bg %vnutrennij_identifikator_processa
      bg %shablon_imeni_processa


                           - 57 -










     perevodit poslednij priostanovlennyj ili ukazannyj pro-
     cess v asinhronnyj rezhim vypolneniya.

break
     vyzyvaet vyhod za  end  blizhajshej  vneshnej  konstrukcii
     foreach ili while.  Mozhno vypolnyat' perehody cherez nes-
     kol'ko urovnej posredstvom napisaniya neskol'kih  opera-
     torov break v odnoj stroke, razdelyaya ih simvolom ;.

breaksw
     vyzyvaet vyhod iz operatora switch za predely operatora
     endsw;

case metka:
     metka  -  shablon odnogo iz variantov operatora  switch.
     V metkah mozhno ispol'zovat' shablony imen fajlov i kata-
     logov ( *, ?, [...] ). Dvoetochie obyazatel'no.

      cd
      cd imya
      chdir
      chdir imya


     zamenyaet rabochij katalog na katalog imya. Esli  parametr
     otsutstvuet,  osushchestvlyaetsya perehod k registracionnomu
     katalogu pol'zovatelya.

continue
     prodolzhaet vypolnenie  blizhajshego  vneshnego  while  ili
     foreach.  Vse stroki cikla do end propuskayutsya, i nachi-
     naetsya novaya iteraciya cikla.

default:
     ispol'zuetsya v switch.  Esli  posle  vseh  proverok  ne
     nashlos' varianta, sovpavshego s variantom v case, vypol-
     nyaetsya to, chto ukazano  v  variante  default.   Variant
     default  dolzhen raspolagat'sya posle vseh case.  Dvoeto-
     chie obyazatel'no.

dirs
     napechatat' soderzhimoe steka imen katalogov.   Zanesenie
     imen katalogov v stek vypolnyaet komanda pushd, udalenie
     imen katalogov  iz  steka  vypolnyaetsya  komandoj  popd.
     |lementy  steka  numeruyutsya  ot  1,  nachinaya ot vershiny
     steka.

      echo spisok_slov
      echo -n spisok_slov


     spisok slov zapisyvaetsya v standartnyj vyvod.  Klyuch  -n
     zapreshchaet perehod na novuyu stroku posle vyvoda.


                           - 58 -










      else
      end
      endif
      endsw


     sm. nizhe opisanie  operatorov  foreach,  if,  switch  i
     while.

eval arg ...
     snachala proizvodyatsya vse podstanovki, zatem slovo  eval
     otbrasyvaetsya, i ostavshiesya simvoly rassmatrivayutsya kak
     komandnaya stroka, kotoraya vypolnyaetsya.

exec komanda
     komanda  zapuskaetsya  vmesto  interpretatora.    Rabota
     interpretatora zavershaetsya.

      exit
      exit(vyrazhenie)


     proishodit vyhod iz interpretatora (pervaya forma)  libo
     so  znacheniem ukazannogo vyrazheniya (vtoraya forma). Zna-
     chenie peremennoj status vsegda ravno kodu vozvrata.

      fg
      fg %vnutrennij_identifikator_processa
      fg %shablon_imeni_processa


     vozvrashchaet poslednij  priostanovlennyj  (pervaya  forma)
     ili ukazannyj process v sinhronnyj rezhim vypolneniya.

      foreach imya (spisok_slov)
                ...
      end


     peremennoj imya posledovatel'no  prisvaivayutsya  znacheniya
     kazhdogo  chlena spiska slov i vypolnyaetsya posledovatel'-
     nost' komand mezhdu dannoj  komandoj  i  sootvetstvuyushchim
     operatorom  end  (foreach  i  end  dolzhny  nahodit'sya v
     otdel'nyh strokah).

glob spisok_slov
     analogichna komande echo. Slova vyvodyatsya bez probela  i
     posle  poslednego slova ne vypolnyaetsya perehod na novuyu
     stroku. Takoj vyvod polezen pri manipulyaciyah s  imenami
     fajlov,  kogda eti imena neobhodimo udlinyat' ili sozda-
     vat' novye.




                           - 59 -










goto slovo
     operator bezuslovnogo  perehoda  na  metku.  Vypolnenie
     prodolzhaetsya  so  stroki, idushchej posle ukazannoj metki.
     Metka dolzhna zavershat'sya simvolom :. Slovo v  operatore
     goto mozhet byt' strokoj, soderzhashchej komandy, psevdonimy
     komand i rasshireniya imen fajlov. V  etom  sluchae  metka
     formiruetsya  kak  rezul'tat  interpretacii i vypolneniya
     etoj stroki.

hashstat
     raspechatyvaet  stroku  statistiki,  opredelyayushchuyu,  nas-
     kol'ko effektivno vnutrennyaya tablica heshirovaniya razme-
     shchaet komandy. Dannaya komanda yavlyaetsya otladochnoj.

      history
      history -r
      history  n
      history -r n
      history -h


     vyvodit spiski iz protokola.  Po klyuchu -r stroki  vyvo-
     dyatsya  v  obratnom  poryadke.   Esli ukazano chislo n, to
     vyvodyatsya tol'ko n strok protokola.  S klyuchom -h  vyvo-
     dyatsya stroki protokola v formate fajla ~/.history.

if(vyrazhenie) komanda
     esli vyrazhenie istinno (ne ravno nulyu), to  vypolnyaetsya
     komanda.  Komanda dolzhna byt' odna. Ne dopuskaetsya pri-
     menenie  posledovatel'nosti  komand  i/ili   konvejera.
     Interpretator   vychislyaet  istinnost'  vyrazheniya  posle
     podstanovok kak v komande, tak i v vyrazhenii.

      if(vyrazhenie_1) then
             ...
      else if(vyrazhenie_2) then
             ...
      else
             ...
      endif


     esli znachenie vyrazheniya_1 istinno, vypolnyayutsya  komandy
     do  pervogo  else.  Inache,  esli  znachenie  vyrazheniya_2
     istinno, vypolnyayutsya komandy do  vtorogo  else  i  t.d.
     Vozmozhno  lyuboe  kolichestvo  par  else-if;  endif nuzhen
     tol'ko odin. CHast' else yavlyaetsya neobyazatel'noj.  Slova
     else  i  endif  dolzhny  byt' pervymi v strokah, gde oni
     ukazany. if dolzhen nahodit'sya odin v stroke  ili  posle
     else.

      jobs
      jobs -l


                           - 60 -










     vyvesti tablicu processov. Format jobs -l vyvodit bolee
     polnuyu informaciyu.  Interpretator obespechivaet rabotu s
     vnutrennimi i  sistemnymi  identifikatorami  processov.
     Sistemnye  identifikatory  processov vyvodyatsya komandoj
     ps ili jobs s klyuchom -l, vnutrennie  -  komandoj  jobs.
     Pol'zovatelyu  predostavlyaetsya vozmozhnost' ne obrashchat'sya
     k sistemnym identifikatoram,  a  ukazyvat'  v  komandah
     upravleniya processami vnutrennie identifikatory.  Vnut-
     rennij identifikator processa pechataetsya  v  kvadratnyh
     skobkah.   Simvolom  + pomechaetsya poslednij iz priosta-
     novlennyh processov; simvolom - predposlednij iz prios-
     tanovlennyh processov.

      kill  %vnutrennij_identifikator_processa ...
      kill -SIG %vnutrennij_identifikator_processa ...
      kill  %shablon_imeni_processa ...
      kill -SIG %shablon_imeni_processa ...
      kill  sistemnyj_identifikator_processa ...
      kill -SIG sistemnyj_identifikator_processa ...
      kill -l


     esli SIG ne ukazan, to processam posylaetsya signal TERM
     (okonchit').   Signal  SIG ukazyvaetsya libo chislom, libo
     imenem  bez  shablona  SIG   (kak   eto   opredeleno   v
     /usr/include/signal.h).  kill  -l  vyvodit  spisok imen
     signalov.

      limit tip_resursa   maksimal'nyj_razmer
      limit tip_resursa
      limit


     dlya 32-razryadnyh mashin sushchestvuet vozmozhnost' ograniche-
     niya   resursov  sistemy,  vydelyaemyh  odnomu  processu.
     Ogranichivaetsya potreblenie tekushchim processom i  kazhdym,
     kotoryj  sozdaetsya,  tak, chto ni odin iz etih processov
     otdel'no ne  prevyshaet  maksimal'nyj  razmer  zadannogo
     resursa.   Esli znachenie maksimal'nyj razmer ne zadano,
     vyvoditsya znachenie tekushchego ogranicheniya; esli  znachenie
     tip_resursa  ne  zadano,  vyvodyatsya  vse  ustanovlennye
     ogranicheniya.   Tekushchee  upravlenie  resursov   vklyuchaet
     vremya  processora  cputime  (maksimal'noe  chislo sekund
     central'nogo processora, otvodimoe  kazhdomu  processu),
     razmer   fajla  filesize  (maksimal'nyj  razmer  odnogo
     fajla, kotoryj mozhno sozdat'), razmer  segmenta  dannyh
     datasize (maksimal'noe uvelichenie oblasti dannye_+_stek
     s pomoshch'yu sbrk(2) za granicu teksta programmy),  razmer
     steka stacksize (maksimal'nyj razmer avtomaticheski ras-
     shiryaemoj  oblasti  steka),  razmer  dampa  coredumpsize
     (maksimal'nyj  razmer  dampa,  kotoryj  budet  sozdan).
     Maksimal'nyj razmer resursa mozhet  byt'  zadan  v  vide
     chisla  (celogo  libo  s  tochkoj),  za  kotorym  sleduet


                           - 61 -










     ukazatel' razmernosti.  Dlya zadaniya imen tipov resursov
     i ukazatelej razmernosti dostatochno zadavat' unikal'nye
     shablony imen.

      login
      login imya


     po komande login zavershaetsya seans raboty pol'zovatelya.
     Komandu  login  mozhno  vypolnyat'  bez argumenta imya i s
     nim. Vo vtorom sluchae srazu zhe budet  zaproshen  vhodnoj
     parol' pol'zovatelya imya.

logout
     ukazyvaet  interpretatoru  o  neobhodimosti  prekratit'
     rabotu.   CHitaetsya  fajl  ~/.logout, esli on imeetsya, i
     vypolnyayutsya vse ukazannye v nem  dejstviya.  Asinhronnye
     processy prodolzhayut vypolnyat'sya.

      nice
      nice +chislo
      nice -chislo
      nice  komanda
      nice +chislo komanda
      nice -chislo komanda


     komanda ustanovki prioriteta.  V  sisteme  ispol'zuetsya
     shkala  prioritetov:  [-100; +100], prioritet +100 samyj
     nizkij.   Pervaya  forma  ustanavlivaet  prioritet   dlya
     interpretatora,  ravnyj  4,  vtoraya - prioritet, ravnyj
     ukazannomu chislu, tret'ya - prioritet dlya komandy,  rav-
     nyj  4.   Tol'ko administrator sistemy mozhet ustanovit'
     otricatel'nyj prioritet.   Dlya  vypolneniya  zapuskaetsya
     novyj  interpretator,  kotoryj  obespechivaet vypolnenie
     komandy.  Komanda dolzhna byt' odna i ne mozhet soderzhat'
     posledovatel'nost' komand, konvejer ili psevdonim.

      nohup
      nohup komanda


     zapreshchaet reakciyu na signaly SIGINT  (CTRL/C),  SIGQUIT
     (CTRL/\) i SIGHUP (BREAK - otklyuchenie udalennogo termi-
     nala ili |VM po kommutiruemoj linii).  Pervaya  forma  v
     komandnom  fajle  ustanavlivaet  svoe  dejstvie  na vse
     stroki, ukazannye nizhe.  Vtoraya forma privodit k  tomu,
     chto  pri vypolnenii ukazannoj komandy eti signaly igno-
     riruyutsya.  Dlya vseh asinhronnyh processov nohup  vypol-
     nyaetsya avtomaticheski.





                           - 62 -










      notify %vnutrennij_identifikator_processa
      notify %shablon_imeni_processa
      notify


     daet komandu na asinhronnyj vyvod soobshchenij ob  izmene-
     niyah  sostoyaniya  processa.   Obychno eti soobshcheniya vyvo-
     dyatsya posle  peredachi  na  vypolnenie  novoj  komandnoj
     stroki.   Esli komanda notify vypolnena bez argumentov,
     to etot rezhim ustanavlivaetsya dlya vseh processov.

      onintr
      onintr -
      onintr metka


     upravlyaet reakciej  na preryvaniya. Pervaya  forma  usta-
     navlivaet  standartnuyu  reakciyu  na preryvaniya, kotoraya
     zaklyuchaetsya v zavershenii komandnogo fajla ili  vozvrate
     na  uroven'  vvoda  terminal'nyh  komand.  Vtoraya forma
     vyzyvaet  ignorirovanie  vseh  preryvanij.    Poslednyaya
     forma vyzyvaet vypolnenie perehoda na metku pri poluche-
     nii preryvaniya ili pri zavershenii porozhdennogo processa
     iz-za  preryvaniya.  V  lyubom sluchae, esli interpretator
     csh rabotaet asinhronno, vse formy komandy onintr igno-
     riruyutsya.

      popd
      popd +chislo


     vypolnyaet komandu cd imya_nomer_2 steka imen  katalogov.
     Imya_nomer_1  iz steka imen katalogov udalyaetsya, ostal'-
     nye  elementy  steka  sohranyayutsya  s  novymi  nomerami.
     Forma   popd  +chislo   udalyaet  imya_nomer_(1+chislo)  iz
     steka, ostal'nye elementy steka  sohranyayutsya  s  novymi
     nomerami.  Pri  etom  perehod  v drugoj katalog ne osu-
     shchestvlyaetsya.

      pushd
      pushd  imya_kataloga
      pushd +chislo


     lyubaya forma komandy pushd menyaet poryadok v  steke  imen
     katalogov.     Forma   pushd   vypolnyaet   komandu   cd
     imya_nomer_2 steka.  Pri  etom  imya_nomer_2  stavitsya  v
     vershinu,  a imya_nomer_1 - na ego mesto v steke; ostal'-
     nye elementy steka ostayutsya  na  svoih  mestah.   Forma
     pushd  imya_kataloga  vypolnyaet komandu cd imya_kataloga,
     pri etom imya_kataloga  zapisyvaetsya  v  vershinu  steka,
     ostal'nye elementy steka sohranyayutsya s novymi nomerami.
     Forma    pushd    +chislo    vypolnyaet    komandu     cd


                           - 63 -










     imya_nomer_(1+chislo).  Pri etom imya_nomer_(1+chislo) sta-
     vitsya v vershinu steka, a chislo imen katalogov perepisy-
     vayutsya  v konec steka v tom poryadke, v kotorom oni sle-
     dovali ot vershiny steka, drugie elementy steka ostayutsya
     bez izmenenij.

rehash
     obnovit' hesh-tablicu.

repeat chislo komanda
     komanda repeat pozvolyaet povtorit'  vypolnenie  komandy
     ukazannoe  chislo  raz.   Komanda  dolzhna  byt'  odna  v
     komandnoj stroke, ona  ne  dolzhna  byt'  posledovatel'-
     nost'yu komand, psevdonimom ili konvejerom.

      set
      set imya
      set imya = slovo
      set imya[indeks] = slovo
      set imya = (spisok_slov)
      set spisok_prisvaivanij


     pervaya forma komandy set otobrazhaet znacheniya vseh pere-
     mennyh  interpretatora  komand.  Peremennye,  kotorye v
     kachestve svoih znachenij imeyut ne odno slovo,  otobrazha-
     yutsya kak zaklyuchennyj v skobki spisok slov. Vtoraya forma
     prisvaivaet ukazannomu imeni pustuyu  stroku,  tret'ya  -
     slovo,  chetvertaya  -  znachenie  slova s nomerom indeks,
     pyataya - spisok slov.  Poslednyaya forma ispol'zuetsya  dlya
     ukazaniya spiska prisvaivanij - v odnoj komandnoj stroke
     neskol'ko prisvaivanij.   Vo  vseh  sluchayah  proishodyat
     rasshireniya  psevdonimov  komandnyh strok i imen fajlov.
     Podstanovka peremennyh osushchestvlyaetsya   pered  vypolne-
     niem prisvaivanij. Pered operaciyami nad elementami mas-
     siva ego neobhodimo polnost'yu opredelit'. Ne  obrabaty-
     vayutsya massivy s peremennymi ili neopredelennymi grani-
     cami.

      setenv
      setenv imya znachenie


     pervaya forma  vyvodit  znachenie  peremennyh  okruzheniya,
     vtoraya  ih ustanavlivaet.  Udalit' peremennuyu okruzheniya
     mozhno komandoj unsetenv.

      shift
      shift peremennaya


     osushchestvlyaet levyj sdvig spiska slov peremennoj.  Levyj
     element  spiska ischezaet. Popytka osushchestvit' shift dlya


                           - 64 -










     pustogo spiska privodit k sostoyaniyu oshibki.

source fajl
     prednaznachena  dlya  vypolneniya  komandnogo  fajla   bez
     porozhdeniya novogo interpretatora.  Komandy source mogut
     byt' vlozhennymi.  Oshibka  v  komande  source  na  lyubom
     urovne  zavershaet vypolnenie.  Vyzov komandy source bez
     argumentov porozhdaet sostoyanie oshibki.

      stop %vnutrennij_identifikator_processa
      stop %shablon_imeni_processa


     ostanavlivaet vypolnenie asinhronnogo processa.

suspend
     ostanavlivaet vypolnenie interpretatora.

      switch( vhodnaya_stroka )
             case obrazec_1:
                     ...
                     breaksw
             ...
             default:
                     ...
      endsw


     v obrazcah variantov case snachala  vypolnyayutsya  podsta-
     novki.   V  obrazcah  variantov case mozhno ispol'zovat'
     shablony imen fajlov *, ? i  [...].   Obrazcy  variantov
     case  posledovatel'no sravnivayutsya s ukazannoj v switch
     vhodnoj strokoj.  Esli ne vyyavleno  sovpadenie  obrazca
     so   vhodnoj  strokoj,  vypolnenie  prodolzhaetsya  posle
     default. Slova case i default dolzhny stoyat'  pervymi  v
     komandnoj stroke.  Operator breaksw peredaet upravlenie
     na stroku, sleduyushchuyu za endsw.  Esli v variante case ne
     ukazan  operator  breaksw, to pri sovpadenii s obrazcom
     vypolnyayutsya vse stroki do pervogo breaksw ili  default.
     Esli  ne  obnaruzheno  sovpadenie  s  obrazcom i default
     otsutstvuet, vypolnenie prodolzhaetsya posle endsw.

      time
      time komanda


     pri  otsutstvii  parametrov  pechataetsya  itog  vremeni,
     izrashodovannogo  interpretatorom  i  ego potomkami.  V
     kachestve komandy nel'zya ispol'zovat' psevdonimy.

      umask
      umask maska



                           - 65 -










     po umolchaniyu fajlu ustanavlivaetsya kod dostupa, kotoryj
     opredelyaetsya  maskoj.   Fajl budet imet' kod dostupa, v
     kotorom  maskirovany  (ravny  0)  bity,   ustanovlennye
     (ravny  1) v maske.  Pust' maska imeet vid 123.  Pervaya
     cifra otnositsya k maskirovaniyu bitov dostupa  dlya  vla-
     del'ca fajla i administratora, vtoraya - k bitam dostupa
     gruppy, a tret'ya - k bitam dostupa vseh ostal'nyh pol'-
     zovatelej.   Znachenie  maski ukazyvaetsya v vos'merichnom
     kode. Obychno  znacheniem  maski  yavlyaetsya  002,  kotoroe
     zadaet  lyuboj  dostup  dlya  pol'zovatelej svoej gruppy,
     dostup dlya chteniya i vypolneniya drugim pol'zovatelyam,  i
     022,  kotoroe  opredelyaet  lyuboj dostup (za isklyucheniem
     zapisi) dlya pol'zovatelej svoej gruppy i  vseh  prochih.
     CHtoby   uznat'  tekushchee  znachenie maski, nado vypolnit'
     komandu umask bez argumenta.

unalias psevdonim ...
     vse psevdonimy, imena kotoryh sootvetstvuyut  ukazannym,
     otmenyayutsya.  Sledovatel'no, unalias * udalyaet vse psev-
     donimy.  Pri zapuske komandy bez argumentov porozhdaetsya
     sostoyanie oshibki.

unhash
     zapreshchaet ispol'zovat' hesh-tablicu pri poiske komandy.

      unlimit   resurs
      unlimit


     snimaet ogranichenie na resurs. Esli resurs  ne  ukazan,
     snimayutsya ogranicheniya na vse resursy.

unset shablon
     udalyayutsya vse peremennye, imena  kotoryh  sootvetstvuyut
     ukazannomu shablonu.  Takim obrazom, unset * udalyaet vse
     peremennye, ustanovlennye komandoj set.

unsetenv imya
     udalyaetsya peremennaya iz okruzheniya.

wait
     ozhidanie vseh vypolnyaemyh processov.  Poka  vypolnyaetsya
     komanda  wait,  priglashenie ne pechataetsya. Komanda wait
     vypolnyaetsya,  poka  ne  zavershatsya  vse  zapushchennye  na
     vypolnenie processy.  Pri preryvanii vypolneniya komandy
     wait (CTRL/C ili SU/C) soobshchayutsya imena i  nomera  vseh
     processov, dlya kotoryh vypolnyalos' ozhidanie.

      while( vyrazhenie )
              ...
      end




                           - 66 -










     cikl vypolnyaetsya, poka istinno (ne ravno nulyu) znachenie
     vyrazheniya.   Klyuchevye  slova  while  i end dolzhny naho-
     dit'sya na otdel'nyh strokah. V tele cikla mozhno ispol'-
     zovat'  break dlya vyhoda iz cikla i continue dlya vozob-
     novleniya sleduyushchej iteracii cikla bez zaversheniya  teku-
     shchej.

















































                           - 67 -










                         SODERZHANIE



    ANNOTACIYA .........................................    2

1.  Komandnyj yazyk C-shell ............................    3
1.1.  Leksicheskaya struktura yazyka C-shell .............    3
1.2.  Formaty komandnyh strok, peremeshcheniya po  fajlovoj
      sisteme .........................................    6
1.3.  Upravlenie vvodom i vyvodom .....................    9
1.4.  Upravlenie processami ...........................   11
1.5.  SHablony imen fajlov i katalogov .................   17
1.6.  Podstanovki znachenij peremennyh .................   19
1.7.  Modifikatory peremennyh .........................   26
1.8.  Vyrazheniya .......................................   30
1.9.  Operatory yazyka C-shell .........................   35
1.10. Komandnye fajly .................................   39
1.11. Protokolirovanie, sredstva raboty s protokolom ..   44
1.12. Peremennye interpretatora csh ...................   49
1.13. Special'nye fajly ...............................   55
1.14. Vstroennye komandy i operatory ..................   57

































                           - 68 -




Last-modified: Mon, 29 Jun 1998 13:54:54 GMT
Ocenite etot tekst: