Komandnyj yazyk C-shell
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 lev