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:
; ( ) << >> & |
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 << 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 << 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 << 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 << f1 && cat << 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 << 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 >>>> 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 << f1 && date ) && ( cat -n << 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 << f1 | pr -2 -w39 -l24 -t >> 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:
<<, <<<<, <<<< slovo
Esli razdelitel' ne ukazan, vvod osushchestvlyaetsya s klaviatury
displeya (standartnyj vvod).
Dlya ukazaniya napravleniya vyvoda (priemnika) ispol'zu-
yutsya sleduyushchie razdeliteli:
>> >>>> |
>>& >>>>& |&
>>! >>>>!
>>&! >>>>&!
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:
<< imya_fajla
otkryvaetsya fajl, kotoryj chitaetsya vmesto chteniya s kla-
viatury displeya;
<<<< slovo
v kachestve vvoda ispol'zuetsya vvod s klaviatury disp-
leya. Vvod prekrashchaetsya, kogda vvedennaya stroka budet
identichna slovu. Naprimer:
cat >> file <<<< 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:
>> imya_fajla
rezul'tat napravlyaetsya v ukazannyj fajl.
>>! 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 << file2 >> file1
ne vypolnitsya, a komanda
cat << file2 >>! file1
vypolnitsya. Predopredelennaya peremennaya noclobber
ispol'zuetsya kak klyuch, zapreshchayushchij sluchajnoe povrezhde-
nie sushchestvuyushchih fajlov. Konstrukcii >>!, >>>>!, >>&! i
>>>>&! otmenyayut dejstvie etogo klyucha dlya ukazannogo v
komandnoj stroke fajla.
>>& imya_fajla ili >>&! imya_fajla
v pervom sluchae diagnosticheskie soobshcheniya napravlyayutsya
v fajl, vo vtorom - budet sdelano to zhe, no s otmenoj
dejstviya klyucha noclobber.
>>>> imya_fajla ili >>>>! 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.
>>>>& imya_fajla ili >>>>&! 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 << file1 |& pr -w79 -l24 >> 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 >> result &
[5] Vypolnyaetsya mx -q -N -u -s *.m >> 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 >> /tmp/result &
2 cc *.c >>& errors &
3 lint *.c >>& 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 << file &
[1] 285
jobs
[1] + ZHdet (vyvod na terminal) cat << 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 >> 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 $<< ispol'zuetsya dlya chteniya stroki s klavia-
tury displeya. Esli v spiske peremennyh ukazana konstrukciya
$<<, to interpretator zhdet vvoda s klaviatury displeya i zame-
nyaet $<< na napechatannuyu stroku
- 25 -
% set cveta = $<<
krasnyj sinij zelenyj
% echo $cveta
krasnyj sinij zelenyj
% @ aaa = 1 + $<< + 3
2
% echo $aaa
6
% echo $<<
krasnyj sinij zelenyj
krasnyj sinij zelenyj
% set cveta = ( krasnyj sinij zelenyj $<< seryj )
belyj
% echo cveta: $cveta
cveta: krasnyj sinij zelenyj belyj seryj
% echo $cveta[4]
belyj
% set cveta[4] = $<<
goluboj
% echo $cveta[4]
goluboj
V nekotoryh versiyah interpretatora csh konstrukciya $<< 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
<<= men'she ili ravno?
>>= bol'she ili ravno?
>> bol'she?
<< men'she?
+ slozhit'
- vychest'
* umnozhit'
/ delit'
% ostatok deleniya
(odin operand):
++ inkrement,
(postfiksnaya)
-- dekrement,
(postfiksnaya)
porazryadnye_logicheskie:
& umnozhenie
| slozhenie
^ isklyuchayushchee ili
~ dopolnenie
(unarnaya)
! otricanie
(unarnaya)
>>>> sdvig vpravo
<<<< 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:
||, &&, | , ^ , & , ==, !=,
<<=, >>=, << , >> , <<<<, >>>>, + ,
- , * , / , % , ! , ~ , ( )
Vnutri ukazannyh nizhe grupp operacii imeyut odinakovyj prio-
ritet:
[ =~, !~, ==, != ]
[ <<, >>, <<=, >>= ]
[ <<<<, >>>> ]
[ +, - ]
[ *, /, % ]
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 >> 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 = $<<
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 = $<<
continue
case '[BbBb]':
glob 'Zavodskoj nomer |VM: '
set NOM = $<<
continue
case '[VvWw]':
glob 'Organizaciya: '
set ORG = $<<
continue
case '[GgGg]':
glob 'Podrazdelenie: '
set POD = $<<
continue
case '[1-9]':
case "1[012]":
glob $imya[$otvet]': '
- 41 -
set mes[$otvet] = $<<
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 = "$<<"
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 >>& 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 >>& 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 >>& 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