Polnyj man spravochnik po komandam 4 APK 00210-01 33 01-4 1. KOMANDY OBSHCHEGO NAZNACHENIYA Struktura opisaniya kazhdoj komandy imeet sleduyushchij format: imya: privodyatsya imena komand i kratkaya informaciya o ih naznachenii; format: privoditsya format komandy. Parametry, vzyatye v kvadratnye skobki, mogut byt' opushcheny; mnogotochie posle parametra ukazyvaet na to, chto dannyj parametr mozhet byt' mnogokratno povtoren. opisanie: soderzhit podrobnoe opisanie komandy; fajly: perechislyayutsya imena fajlov, kotorye ispol'- zuyutsya dannoj komandoj; diagnostika: perechislyayutsya diagnosticheskie soobshcheniya, ko- torye mogut vydavat'sya v processe vypolneniya dannoj komandy; zamechaniya: privodyatsya ogranicheniya na oblast' primeneniya komand; dopolnitel'nye ssylki: delayutsya ssylki na sopryazhennye komandy. Dlya udobstva raboty v skobkah privoditsya nomer chasti rukovodstva programmista gde opisany sopryazhennye komandy Opisanie komand obshchego naznacheniya privedeno v prilozhe- nii. 5 APK 00210-01 33 01-4 PRILOZHENIE 6 APK 00210-01 33 01-4 IMYA: apropos - poisk komponentov v spravochnike po sisteme. FORMAT: apropos klyuch ... OPISANIE: Komanda apropos prosmatrivaet kratkij spravochnik po sisteme i vydaet vse zapisi, soderzhashie vhozhdeniya ele- menta, ukazannogo v spiske ("klyuch"). Poskol'ku kazhdaya zapis' kratkogo kataloga soderzhit nomer razdela i naz- vanie dokumenta, etu komandu udobno ispol'zovat' dlya polucheniya informacii o komponentah, kotorye ne imeyut otdel'nogo dokumenta, no upominayutsya pri opisanii kakogo-libo drugogo komponenta. PRIMERY Pri ispol'zovanii komandy: apropos time mozhet byt' poluchena sleduyushchaya posledavatel'nost' strok: alarm - vypolnit' komandy v ukazannoe vremya; time - komanda vydachi vremeni raboty komandy. 7 APK 00210-01 33 01-4 IMYA: ar - programma obsluzhivaniya arhivov i bibliotek. FORMAT: ar klyuch [pozimya] arhiv imya ... OPISANIE: Komanda ar obsluzhivaet gruppy fajlov, ob'edinennyh v edinyj arhivnyj fajl. Osnovnym primeneniem etoj prog- rammy yavlyaetsya sozdanie i modifikaciya bibliotechnyh fajlov, ispol'zuemyh redaktorom svyazij ld. Tem ne me- nee, ona mozhet byt' ispol'zovana v lyubyh podobnyh celyah. "Klyuch" predstavlyaet soboj odin iz simvolov drqtpmx, kotoryj mozhet ob'edinyat'sya s odnim ili neskol'kimi iz simvolov vuaibcl (poslednie mogut byt' opushcheny). Argu- ment "arhiv" zadaet imya arhivnogo fajla. Argument "imya" predstavlyaet soboj imya fajla, kotoryj neobhodimo zanesti v arhiv ili imya fajla, uzhe vhodyashchego v sostav arhiva. Klyuchi zadayut sleduyushchie rezhimy raboty: d - Udalenie fajlov s ukazannymi imenami iz arhiva; r - Zapis' perechislennyh fajlov v arhiv. Esli fajl uzhe vhodit v arhiv, to on zamenyaetsya na novyj. Esli vmeste s klyuchom "r" ispol'zuetsya neobyaza- tel'nyj klyuch "u", to v arhive zamenyayutsya tol'ko te fajly, kotorye imeyut bolee pozdnie daty modi- fikacii, chem odnoimennye fajly, vhodyashchie v ar- 8 APK 00210-01 33 01-4 hiv. Esli ispol'zuetsya odin iz klyuchej pozicioni- rovaniya "abi" i prisutstvuet parametr "pozimya", novye fajly pomeshchayutsya posle (a) ili pered (b ili i) fajlom "pozimya". V protivnom sluchae novye fajly pomeshchayutsya v konec; q - Bystroe dobavlenie perechislennyh fajlov v konec arhiva. Klyuchi pozicionirovaniya ne dopuskayutsya. V etom rezhime ne proveryaetsya, nahodyatsya li uzhe v arhive fajly s zadannymi imenami. |tot rezhim po- lezen tol'ko pri sozdanii bol'shih arhivov po chastyam dlya ustraneniya lishnih dejstvij; t - Poluchenie imen fajlov, vhodyashchih v arhiv. Esli imena fajlov ne zadany, vydaetsya spisok imen vseh fajlov arhiva, v protivnom sluchae vyvoditsya spisok imen tol'ko zadannyh fajlov. Esli fajl s zadannym imenem otsutstvuet v arhive, vydaetsya sootvetstvuyushchaya diagnostika; p - Vydacha v standartnyj fajl vyvoda perechislennyh fajlov iz arhiva. Soderzhimoe arhiva ne izmenyaet- sya; m - Peremeshchenie perechislennyh fajlov. Esli pri- sutstvuet klyuch pozicionirovaniya i parametr "po- zimya", fajly peremeshchayutsya v ukazannoe mesto, kak i v rezhime "r", inache fajly peremeshchayutsya v konec arhiva; 9 APK 00210-01 33 01-4 x - Perechislennye fajly vydelyayutsya iz arhiva v ot- del'nye fajly. Esli ne zadany imena fajlov, ras- pakovyvaetsya ves' arhiv. Ni v koem sluchae koman- da h ne izmenyaet arhivnyj fajl; v - Esli ukazan dannyj klyuch, komanda ar vydaet pod- robnyj protokol svoih dejstvij. Pri ispol'zova- nii sovmestno s klyuchem "t", vydaetsya bolee podprobnaya informaciya o fajlah, vhodyashchih v ar- hiv. Kogda dannyj klyuch ispol'zuetsya sovmestno s klyuchem "p", pered kazhdym fajlom ukazyvaetsya ego imya; c - Sozdaet novyj arhiv, dazhe esli arhivnyj fajl "arhiv" uzhe sushchestvuet; l - Obychno komanda ar pomeshchaet svoi vremennye fajly v kataloge /tmp. Zadanie dannogo klyucha privodit k tomu, chto oni razmeshchayutsya v tekushchem kataloge. FAJLY: /tmp/v* vremennye fajly DOPOLNITELXNYE SSYLKI : ld, ar, lorder, ranlib ZAMECHANIYA: Esli v spiske parametrov odin i tot zhe fajl ukazan dvazhdy, on mozhet byt' dvazhdy pomeshchen v arhiv. 10 APK 00210-01 33 01-4 IMYA: as, newas - assembler FORMAT: as [-] [-o obfajl] [imya...] OPISANIE: Komanda as assembliruet fajly s ukazannymi imenami ili standartnyj fajl vvoda, esli imena fajlov ne zadany. Esli zadan klyuch "-", vse neopredelennye pri assembli- rovanii simvoly schitayutsya vneshnimi. Rezul'tat raboty komandy as pomeshchaetsya v fajl "obfajl" ili, esli ne zadan klyuch "-o", ispol'zuetsya fajl a.out v tekushchem spravochnike. Komanda newas vyzyvaet novyj variant assemblera, v ko- torom uluchsheny diagnostiki, vvedena vozmozhnost' is- pol'zovat' russkie bukvy v identifikatorah, no imeyutsya nekotorye ogranicheniya na poryadok opisaniya identifika- torov (vse peremennye v pravoj chasti operatorov "=" dolzhny byt' opredeleny). FAJLY: /tmp/as2 vtoroj prohod assemblera /tmp/atm[1-3]? vremennye fajly a.out ob'ektnyj fajl DOPOLNITELXNYE SSYLKI : ld, nm, adb, a.out. 11 APK 00210-01 33 01-4 Imeetsya otdel'noe opisanie assemblera. DIAGNOSTIKA: Esli vhodnoj fajl ne dostupen dlya chteniya - vydaetsya znak voprosa "?", za kotorym sleduet imya fajla. Esli assembliruemaya programma soderzhit oshibki, to vydaetsya odin simvol diagnostiki, imya fajla i nomer stroki, v kotoroj byla obnaruzhena oshibka. Vozmozhno sleduyushchie simvoly diagnostiki: ) Narushen balans skobok; ] Narushen balans skobok; < Nezavershennaya stroka; * Nekorrektnaya kosvennaya ssylka; . Nekorrektnoe izmenenie tekushchego adresa; a Oshibka v adrese; b Perehod na nechetnyj libo slishkom bol'shoj adres; e Oshibka v vyrazhenii; f Nevernyj lokal'nyj simvol (tipa 'f' ili 'b'); g Neizvestnyj simvol; i Konec fajla v kostrukcii "if"; m Simvol mnogokratno opredelen kak metka; o Nechetnyj adres; 12 APK 00210-01 33 01-4 p "." razlichaetsya v 1-om i 2-om prohode; r Oshibka razmesheniya; u Neopredelennyj simvol; x Sintaksicheskaya oshibka. ZAMECHANIYA: Pri diagnostike sintaksicheskih oshibok nomer stroki, gde proizoshla oshibka, mozhet ukazyvat'sya neverno. 13 APK 00210-01 33 01-4 IMYA: at - vypolnit' komandy v ukazannoe vremya. FORMAT: at vremya [den'] [fajl] OPISANIE: Komanda at sohranyaet kopiyu fajla "fajl" (po umolchaniyu - standartnyj fajl vvoda) dlya zapuska v ukazannoe vre- mya. Predpolagaetsya, chto "fajl" soderzhit programmu na yazyke SHELL (ili CSHELL). V nachalo fajla vstavlyaetsya komanda perehoda v spravochnik (cd), kotoryj byl teku- shchim v moment vypolneniya komandy at. Za etim sleduet opredelenie vseh makroperemennyh "sredy". Pri zapuske podobnogo komandnogo fajla ispol'zuyutsya identifikatory gruppy (GID) i pol'zovatelya (UID) sozdatelya. Argument "vremya" predstavlyaet soboj ot 1 do 4 cifr, za kotorymi mogut sledovat' simvoly "a", "p", "n" ili "m", oznachayushchie "do poludnya", "posle poludnya", "dnem" i "noch'yu" sootvetstvenno. Odna ili dve cifry rassmat- rivayutsya kak chasy. Tri ili chetyre cifry rassmatrivayut- sya kak chasy i minuty. Esli bukvy posle cifr otsutstvu- yut, podrazumevaetsya 24-chasovoe sutochnoe vremya. Neobyazatel'nyj parametr "den'" ispol'zuetsya dlya zada- niya libo nazvaniya mesyaca, za kotorym sleduet chislo, libo - dnya nedeli. Esli prisutsvuet slovo "week", vyzov otkladyvaetsya na sem' dnej. Nazvaniya mesyacev i dnej mogut usekat'sya do raspoznavaemoj velichiny. Pri- 14 APK 00210-01 33 01-4 vedem primery dopustimyh komand: at 8am jan 24 at 1530 fr week Programmy at vypolnyayutsya posredstvom periodicheskogo zapuska komandy /usr/lib/atrun iz cron. Diskretnost' at zavisit ot togo, kak chasto vypolnyaetsya atrun. FAJLY: /usr/spool/at/gg.ddd.chchchch.nn Rabota dolzhna byt' vypolnena v "chchchch" chasu "ddd" dnya "gg" goda; "nn" predstavlyaet soboj unikal'- nyj nomer. /usr/spool/at/lasttimedone Soderzhit "chchchch" dlya poslednego chasa raboty. /usr/spool/at/past Katalog rabot, kotorye vypolnyayutsya v nastoyashchee vremya. /usr/lib/atrun Programma, kotoraya vypolnyaet raboty v soot- vetstvii s raspisaniem. DOPOLNITELXNYE SSYLKI : calendar, cron DIAGNOSTIKA: Soobshcheniya o razlichnyh sintaksicheskih oshibkah i ukaza- niyah vremeni vne dopustimogo diapazona. 15 APK 00210-01 33 01-4 ZAMECHANIYA: Vsledstvie diskretnosti vypolneniya /usr/lib/atrun mogut proishodit' oshibki v planirovanii raboty s opoz- daniem do 24 chasov. 16 APK 00210-01 33 01-4 IMYA: awk - yazyk skanirovaniya i obrabotki teksta FORMAT: awk [-fc] [prog] [fajl]... OPISANIE: Komanda awk yavlyaetsya interpretatorom svoeobraznogo yazyka, prednaznachennogo dlya obrabotki tekstov. V kazhdom vhodnom fajle "fajl" osushchestvlyaetsya poisk strok, kotorye sootvetstvuyut odnomu iz nabora shablo- nov, zadannyh v argumente "prog". S kazhdym shablonom v "prog" mozhet byt' svyazano nekotoroe dejstvie, kotoroe budet vypolneno kogda ustanovitsya sootvetstvie mezhdu strokoj fajla "fajl" i dannym shablonom. Nabor shablonov mozhet zadavat'sya libo neposredstvenno v parametre "prog", libo ukazyvat'sya kak "-f fajl". Fajly schityvayutsya po poryadku.Esli fajly ne ukazany ili zadan parametr "-", ispol'zuetsya standartnyj fajl vvo- da. Kazhdaya stroka sravnivaetsya s shablonom kazhdogo ope- ratora "shablon-dejstvie". Dlya kazhdogo sootvetstvuyushchego shablona vypolnyaetsya svyazannoe s nim dejstvie. Vhodnaya stroka sostoit iz polej, kotorye razdeleny probelami (eto umolchanie mozhet byt' izmeneno s pomoshch'yu FS). Polya oboznachayutsya $1,$2,...;. $0 otnositsya ko vsej stroke. Operator "shablon-dejstvie" imeet sleduyushchij vid: 17 APK 00210-01 33 01-4 shablon {dejstvie} Otsutstvie chasti "{dejstvie}" oznachaet pechat' soot- vetstvuyushchih "shablonu" strok. Otsutstvie "shablona" oz- nachaet, chto "dejstvie" vypolnyaetsya nad kazhdoj vvodimoj strokoj. Dejstvie predstavlyaet soboj posledovatel'nost' opera- torov. Imeyutsya sleduyushchie operatory: if(uslovie) operator [else operator] while (uslovie) operator for (vyr; uslovie; vyr) operator break continue { [operator]... } peremennaya = vyr print [spisok-vyr] [>vyr] printf format [,spisok-vyr] [>vyr] next # propustit' ostal'nye shablony # dlya etoj vhodnoj stroki exit # propustit' ostal'noj vvod. Operatory zakanchivayutsya tochkoj s zapyatoj, simvolom novoj stroki ili pravoj skobkoj. Pustoj spisok vyrazhe- nij otnositsya ko vsej stroke. Vyrazheniya predstavlyayut soboj stroku ili chislovye znacheniya i stroyatsya s po- moshch'yu operacij +, -, *, /, % i konkatenaciya (ukazyva- emaya probelom). V vyrazheniyah dopuskayutsya takzhe opera- 18 APK 00210-01 33 01-4 cii yazyka Si ++, --, +=, -=, *=, /= i %=. Peremennye mogut predstavlyat' soboj skalyary, elementy massivov (oboznachaemye x[i]) ili polya. Nachal'nymi znacheniyami peremennyh yavlyayutsya pustye stroki. Indeksami massivov mogut byt' lyubye stroki, ne obyazatel'no chislovye - eto pozvolyaet organizovat' nekotoruyu raznovidnost' associ- ativnoj pamyati. Strokovye konstanty zaklyuchayutsya v ka- vychki "...". Operator print vydaet svoi parametry v standartnyj vyvod (ili v fajl, esli zadano ">fajl"), razdelyaya ih tekushchim razdelitelem vyhodnyh polej i zavershaya razde- litelem vyhodnyh zapisej. Operator printf formatiruet svoj spisok vyrazhenij v sootvetstvii s formatom. Vstroennaya funkciya length vozvrashchaet dlinu svoego pa- rametra, rassmatrivaemogo kak stroku, ili vsej stroki, esli parametr otsutstvuet. Imeyutsya takzhe vstroennye funkcii ehr, log, sqrt i int, poslednyaya usekaet znache- nie svoego parametra do celogo. Funkciya substr(s,m,n) vozvrashchaet n-simvol'nuyu podstroku stroki s, nachinayushchu- yusya s m-oj pozicii. Funkciya sprintf(fmt,vyr,vyr,...) formatiruet vyrazheniya v sootvetstvii s printf forma- tom, zadannym posredstvom "fmt",i vozvrashchaet rezul'ti- ruyushchuyu stroku. SHablony predstavlyayut soboj proizvol'nye bulevy kombi- nacii (!, ||, && i skobki) regulyarnyh vyrazhenij i vy- razhenij otnosheniya. Regulyarnye vyrazheniya dolzhny obram- 19 APK 00210-01 33 01-4 lyat'sya znakami "/". Izolirovannye regulyarnye vyrazheniya v shablone otnosyatsya ko vsej stroke. Regulyarnye vyrazhe- niya mogut prisutstvovat' takzhe i v vyrazheniyah otnoshe- niya. SHablon mozhet sostoyat' iz dvuh shablonov, razdelennyh zapyatoj (v etom sluchae dejstvie vypolnyaetsya dlya vseh strok mezhdu strokoj, v kotoroj vstrechaetsya pervyj shablon i strokoj, v kotoroj vstrechaetsya vtoroj shablon). Vyrazhenie otnosheniya mozhet imet' odnu iz sleduyushchih form: vyrazhenie oppodb regulyarnoe-vyrazhenie vyrazhenie opotn vyrazhenie gde "opotn" predstavlyaet soboj odnu iz shesti oreracij otnosheniya yazyka Si, a "oppodb" predstavlyaet soboj libo znak ^ ("vhodit"), libo !^ ("ne vhodit"). Uslovie predstavlyaet soboj arifmeticheskoe vyrazhenie, vyrazhenie otnosheniya libo ih bulevu kombinaciyu. Special'nye shablony BEGIN i END mogut ispol'zovat'sya dlya polucheniya upravleniya pered schityvaniem pervoj vhodnoj stroki i posle schityvaniya poslednej. BEGIN dolzhen byt' pervym shablonom, a END - poslednim. Otdel'nyj simvol "c" mozhet ispol'zovat'sya dlya razdele- niya polej putem ukazaniya v nachale programmy: 20 APK 00210-01 33 01-4 BEGIN {FS="c"} libo putem ispol'zovaniya klyucha "-fc". K imenam peremennyh so special'nym znacheniem otnosyat- sya: NF - kolichestvo polej v tekushchej zapisi; NR - poryadkovyj nomer tekushchej zapisi; FILENAME - imya tekushchego vhodnogo fajla; FS - razdelitel' vhodnyh polej (po umolchaniyu - probel); RS - razdelitel' vhodnyh zapisej (po umolchaniyu - simvol novoj stroki); OFS - razdelitel' vyhodnyh polej (po umolchaniyu - probel); ORS - razdelitel' vyhodnyh zapisej (po umolchaniyu - simvol novoj stroki); OFMT - vyhodnoj format dlya chisel (po umolchaniyu - "%.6g"); $0 - obrabatyvaemaya stroka; $i - i-toe pole obrabatyvaemoj stroki. PRIMERY: Pechat' strok s dlinoj bolee 72 simvolov: 21 APK 00210-01 33 01-4 length > 72 Pechat' pervyh dvuh polej v obratnom poryadke: {print $2, $1} Pechat' polej v obratnom poryadke: {for (i=NF; i>0; --i) print $i} Pechat' vseh strok, nachinaya so stroki, soderzhashchej slovo "start" do stroki so slovom "stop" vklyuchitel'no: /start/,/stop/ Pechat' vseh strok, u kotoryh pervoe pole otlichaetsya ot pervogo polya predydushchej stroki: $1 != prev {print; prev = $1} DOPOLNITELXNYE SSYLKI : lex, sed. Imeetsya otdel'noe opisanie awk. DIAGNOSTIKA: V versii awk dlya mashin s ogranichennym razmerom adresu- emoj pamyati (poryadka 64Kbajt na process) osnovnye di- agnosticheskie soobshcheniya zameneny nomerami oshibok. Pri etom chast' dignosticheskoj informacii teryaetsya dlya pol'zovatelya. Dalee privoditsya spisok diagnosticheskih soobshchenij vydavaemyh polnoj versiej awk s ih nomerami (poteryannaya informaciya oboznachaetsya (?)): 22 APK 00210-01 33 01-4 1 : unknown type (?) in penter 2 : unknown type (?) in freetr 3 : regular expression too long 4 : unknown type (?) in cfoll 5 : unknown type (?) in first 6 : can't open (?) 7 : record `(?)' too long 8 : record `(?)' has too many fields 9 : record `(?)' has too many fields 10 : built giant record `(?)...' 11 : trying to access field (?) 12 : can't open (?) 13 : out of space in ALLOC 14 : illegal statement (?) 15 : unexpected break, continue or next 16 : unexpected break, continue or next 17 : unknown boolean operator (?) 18 : unknown relational operator (?) 19 : out of temporaries in gettemp 20 : format item (?)... too long 21 : not enough arguments in printf((?)) 22 : illegal arithmetic operator (?) 23 : division by zero 24 : division by zero 25 : division by zero 26 : division by zero 27 : illegal assignment operator (?) 28 : (?) is not an array 23 APK 00210-01 33 01-4 29 : illegal jump type (?) 30 : illegal function type (?) 31 : string (?) too long to print 32 : too many output files (?) 33 : can't open file (?) 34 : out of space in makesymtab 35 : symbol table overflow at (?) 36 : can't set $0 37 : can't set $0 38 : illegal reference to array (?) 39 : funny variable (?): (?) (?) (?) (?) 40 : out of space in tostring on (?) ZAMECHANIYA: Ne sushchestvuet yavnogo preobrazovaniya mezhdu chislami i strokami. Dlya togo, chtoby vyrazhenie obrabatyvalos' kak chislo, dobav'te k nemu 0, a dlya togo, chtoby ono obra- batyvalos' kak stroka, ob'edinite ego s "". 24 APK 00210-01 33 01-4 IMYA: bas - interpretator yazyka BASIC. FORMAT: bas [file] OPISANIE: Komanda bas yavlyaetsya interpretatorom odnogo iz dialek- tov yazyka BASIC. Esli v komandnoj stroke zadano imya fajla "file", to pered vyzovom interpretatora etot fajl schityvaetsya (predpolagaetsya, chto on soderzhit programmu na yazyke BASIC). Bas dopuskaet stroki sledu- yushchego vida: operator metka operator V kachestve metki ispol'zuetsya celoe polozhitel'noe chislo. Pomechennye operatory zapominayutsya dlya posledu- yushchego vypolneniya i sortiruyutsya v poryadke vozrastaniya znachenij metok. Nepomechennye operatory vypolnyayutsya ne- medlenno. Esli operator soderzhit vychislyaemoe vyrazhenie bez prisvaivaniya, rezul'tat vydaetsya srazu. SINTAKSIS OPERATOROV: vyrazhenie Vyrazhenie vypolnyaetsya dlya dostizheniya zhelaemogo effekta (prisvaivanie ili vyzov fukcii) ili dlya pechati.V dal'nejshem vyrazhenie budet oboznachat'sya simvolom V; 25 APK 00210-01 33 01-4 comment ... |tot operator ignoriruetsya, primenyaetsya dlya vklyucheniya kommentariya v programmu; done Vyhod iz interpretarora obratno v sistemu; dump Vyzyvaet pechat' imeni i tekushchego znacheniya vseh peremennyh v processe vypolneniya programmy; edit Vhod v redaktor ed. V kachestve imeni fajla re- daktoru ed peredaetsya parametr file. Posle vyho- da iz redaktora proishodit vozvrat v interpreta- tor, prichem programma nahodyashchayasya v fajle file, kompiliruetsya zanovo. for identifikator = V V operator for identifikator = V V gruppa operatorov next Operator for porozhdaet mnogokratnoe vypolnenie operatora (pervaya forma zapisi) ili gruppy ope- ratorov (vtoraya forma zapisi), kontroliruya koli- chestvo iteracij po znacheniyu peremennoj name. |toj peremennoj prisvaivaetsya znachenie pervogo vyrazheniya, kotoroe uvelichivaetsya na edinicu posle kazhdogo shaga vypolneniya cikla. Cikl pro- dolzhaetsya do teh por poka, znachenie peremennoj ne prevyshaet znacheniya vtorogo vyrazheniya. goto V 26 APK 00210-01 33 01-4 Vyrazhenie vychislyaetsya, perevoditsya v celoe, posle chego proishodit perehod k operatoru, metka kotorogo ravna znacheniyu vyrazheniya. Programma prodolzhaet vypolnyatsya s etogo mesta. Esli dannyj operator ne pomechen, to pered ego interpretaciej kompiliruyutsya operatory nakoplennye ranee. if V operator if V gruppa operatorov [ else gruppa operatorov ] fi Operator (pervaya forma) ili gruppa operatorov (vtoraya forma) vypolnyaetsya, esli znachenie vyra- zheniya ne ravno nulyu. Vo vtoroj forme dopuskaetsya nalichie al'ternativnoj gruppy operatorov. list [V [V]] |tot operator primenyaetsya dlya prosmotra teksta programmy. Esli otsutstvuyut argumenty, vydaetsya vsya programma. Esli prisutstvuet odin argument, to vydaetsya tol'ko odin operator, metka kotorogo ravna znacheniyu zadannogo vyrazheniya. Esli zadany dva argumenta, to vydayutsya operatory v ukazannom diapazone. print spisok "Spisok" vklyuchaet v sebya vyrazheniya, peremennye i 27 APK 00210-01 33 01-4 tekstovye konstanty (tekstovye konstanty berutsya v kavychki (")). Operator print vydaet znacheniya perechislennyh vyrazhenij ili peremennyh sovmestno s tekstom. prompt spisok Dejstvuet analogichno operatoru print, tol'ko posle vydachi poslednego simvola ne proishodit perehoda na novuyu stroku. return [V] Vyrazhenie vychislyaetsya i ego znachenie ispol'zuet- sya v kachestve znacheniya, kotoroe vozvrashchaet funkciya. Esli argument otsutstvuet, vozvrashchaetsya nol'. run Programma kompiliruetsya, datchiku sluchajnyh chisel ustanavlivaetsya startovoe znachenie. Upravlenie peredaetsya operatoru s naimen'shim znacheniem metki. save [V [V]] Operator save rabotaet analogichno operatoru list, tol'ko vyvod idet ne na terminal, a v fajl file. Esli komanda bas byla vyzvana bez argumen- ta, ispol'zuetsya fajl b.out v tekushchem kataloge. SINTAKSIS VYRAZHENIJ: identifikator Identifikator mozhet soderzhat' proizvol'noe koli- 28 APK 00210-01 33 01-4 chestvo simvolov, odnako znachimymi schitayutsya per- vye chetyre. Identifikator dolzhen nachinat'sya s bukvy i mozhet sostoyat' tol'ko iz latinskih strochnyh bukv i cifr. chislo CHislo opredelyaet chislovuyu konstantu i zapisyva- etsya v tradicionnom fortranovskom stile. CHislo sostoit iz cifr i mozhet soderzhat' desyatichnuyu tochku ili znak poryadka "e" s posleduyushchej ekspo- nentoj. Naprimer: 4, -15, 0.34, 1.2e+5. (V) Skobki primenyayutsya dlya izmeneniya starshinstva vy- polneniya operacij. _V Inversiya znacheniya vyrazheniya. V operaciya V Vypolnenie operacii. V( [V[, V]] ) Vyzov funkcii s zadannym chislom argumentov. Zna- chenie pervogo vyrazheniya ispol'zuetsya v kachestve metki operatora, s kotorogo nachinaetsya funkciya. Esli znachenie vyrazheniya poluchaetsya otricatel'- nym, vyzyvaetsya sootvetstvuyushchaya vstroennaya funkciya (pravda, neizvetno kakaya imenno). identifikator [ V[, V]] Znachenie vyrazheniya, perevedennoe v celoe, is- pol'zuetsya dlya indeksacii massivov. Zapis' vida a[1,2] ravnosil'na zapisi vida a[1][2]. Znacheniya 29 APK 00210-01 33 01-4 indeksov usekayutsya do diapazona ot 0 do 32767. SPISOK OPERACIJ: = Operaciya prisvaivaniya. Levyj operand dolzhen byt' identifikatorom ili elementom massiva. Znachenie pravogo operanda prisvaivaetsya levomu. & | Operaciya logicheskoe "I" (&) daet rezul'tat nol', esli kakoj-libo iz operandov raven nulyu, i ne nol', esli oba operanda ne ravny nulyu. Operaciya logicheskoe "ILI" (|) daet rezul'tat nol', esli oba operanda ravny nulyu, i ne nol', esli kakoj- libo iz nih ne raven nulyu. < <= > >= <> Operacii otnosheniya: < men'she; <= ne bol'she; > bol'she; >= ne men'she; <> ne ravno; vozvrashchayut znachenie odnogo iz argumentov esli otnoshe- nie soblyudaetsya, v protivnom sluchae vozvrashchaetsya nol'. Opercii otnosheniya odnogo urovnya dopuskayut vlozhennost' sleduyushchego vida: rezul'tat operacii a>b>c, budet ana- logichen rezul'tatu operacii a>b&b>c; 30 APK 00210-01 33 01-4 + - Slozhenie i vychitanie; * / Umnozhenie i delenie; ^ Vozvedenie v stepen'; VSTROENNYE FUNKCII: arg(i) Poluchenie i-togo parametra tekushchego vyzova funkcii; exp(x) |ksponenta ot x; log(x) Natural'nyj logarifm ot x; sqr(x) Kvadratnyj koren' ot x; sin(x) Sinus ot x (radiany); cos(x) Kosinus ot x (radiany); atn(x) Arktangens ot x. Vozvrashchaet znacheniya v diapazone ot -J/2 do J/2; rnd() Datchik sluchajnyh chisel, vozvrashchaet znacheniya v diapazone ot 0 do 1; 31 APK 00210-01 33 01-4 expr() Programmnyj vvod. Stroka chitaetsya iz standartno- go fajla vvoda i rassmatrivaetsya kak vyrazhenie. Programma poluchaet znachenie etogo vyrazheniya; abs() Absolyutnoe znachenie; int(x) Perevod x v celoe; FAJLY: /tmp/btm* vremennye fajly b.out fajl dlya sohraneniya programmy /bin/ed redaktor DIAGNOSTIKA: Sintaksicheskie oshibki privodyat k vydache nekorrektnoj stroki. 32 APK 00210-01 33 01-4 IMYA: basename - otbrosit' suffiksy i prefiksy imeni fajla. FORMAT: basename stroka [suffiks] OPISANIE: Komanda basename udalyaet iz "stroki" vse prefiksy, okanchivayushchiesya simvolom "/", a takzhe "suffiks", esli on prisutstvuet v stroke, i vydaet rezul'tat v stan- dartnyj fajl vyvoda. |ta komanda obychno ispol'zuetsya v programmah napisannyh na yazyke SHELL. PRIMERY: Privedem proceduru, vyzyvaemuyu s parametrom /usr/src/cmd/cat.c, kotoraya kompiliruet fajl s ukazan- nym imenem i pomeshchaet rezul'tat v fajl cat v tekushchem kataloge: cc $1 mv a.out `basename $1 .c` DOPOLNITELXNYE SSYLKI : sh 33 APK 00210-01 33 01-4 IMYA: bc - interpretator yazyka BC. FORMAT: bc [-c] [-l] [fajl...] OPISANIE: Komanda bc predstavlyaet soboj interaktivnyj processor dlya yazyka, kotoryj po sintaksisu napominaet yazyk Ci, no pozvolyaet vypolnyat' arifmeticheskie operacii s pro- izvol'noj tochnost'yu. Programma na dannom yazyke schity- vaetsya iz standartnogo fajla vvoda. Esli zadany argu- menty tipa "fajl", to predpolagaetsya, chto eto imena fajlov, soderzhashchih rabochie podprogrammy na yazyke BC. |ti fajly schityvayutsya pered vypolneniem osnovnoj prog- rammy. Esli zadan parametr "-l", to ispol'zuetsya stan- dartnaya biblioteka funkcij proizvol'noj tochnosti. V privodimom kratkom opisanii sintaksisa yazyka BC, is- pol'zuyutsya sleduyushchie sokrashcheniya: B posledovatel'nost' simvolov ot "a" do "z"; V vyrazhenie; OP operator. KOMMENTARII: ogranichivayutsya posledovatel'nostyami simvolov "/*" i "*/" IMENA: 34 APK 00210-01 33 01-4 prostye peremennye: B elementy massiva: B[V] slova "ibase", "obase" i "scale" PROCHIE OPERANDY: chisla proizvol'noj dliny (vozmozhno so znakom i desyatichnoj tochkoj). (V) sqrt(B) kvadratnyj koren' length(B) chislo znachashchih desyatichnyh cifr scale(B) tochnost' B(V,...,V) vyzov podprogrammy OPERACII: + - * / % ^ (% - ostatok, ^ - stepen') ++ -- (prefiks i postfiks, primenyayutsya k imenam) == <= >= != < > = =+ =- =* =/ =% =^ OPERATORY: V {OP; ... ;OP} if(V) OP while(V) OP for(V;V;V) OP pustoj operator break quit 35 APK 00210-01 33 01-4 OPREDELENIYA FUNKCIJ: define B(B, ... ,B){ auto B, ... ,B OP; ... OP return(B) } Funkcii iz standartnoj biblioteki: s(x) - sinus; c(h) - kosinus; e(h) - eksponenta; l(x) - logarifm; a(h) - arktangens; j(n,x) - funkciya Besselya Vse parametry funkcij peredayutsya po znacheniyu. Znachenie operatora, yavlyayushchegosya vyrazheniem, raspechaty- vaetsya, esli osnovnoj operaciej ne yavlyaetsya prisvaiva- nie. Operatory mogut razdelyat'sya libo tochkami s zapya- toj, libo simvolami novoj stroki. Prisvaivanie pere- mennoj scale vliyaet na kolichestvo cifr, poluchaemyh v rezul'tate arifmeticheskih operacij po pravilam dc. Prisvaivaniya peremennym ibase i obase ustanavlivaet vhodnoe i vyhodnoe osnovaniya sootvetstvenno. Odna i ta zhe bukva mozhet ispol'zovat'sya v kachestve massiva, funkcii i prostoj peremennoj odnovremenno. Vse peremennye v programme yavlyayutsya global'nymi. Pere- mennye "auto" pri vyzove funkcij pomeshchayutsya v stek. 36 APK 00210-01 33 01-4 Pri ispol'zovanii massivov v kachestve parametrov funkcii i pri opredelenii ih kak avtomaticheskih pere- mennyh, imya massiva dolzhno soprovozhdat'sya pustymi kvadratnymi skobkami. Naprimer, podprogramma: scale = 20 define e(x){ auto a,b,c,i,s a = 1 b = 1 s = 1 for(i=1; i==1; i++){ a = a*x b = b*i c = a/b if(c == 0) return(s) s = s+c } } opredelyaet funkciyu dlya vychisleniya priblizhennogo znache- niya pokazatel'noj funkcii, a for(i=1; i <= 10; i++) e(i) vydaet priblizhennye znacheniya pokazatel'noj funkcii dlya pervyh desyati celyh chisel. Komanda bc fakticheski predstavlyaet soboj preprocessor 37 APK 00210-01 33 01-4 dlya dc, kotoryj vyzyvaetsya avtomaticheski, esli ne pri- sutstvuet klyuch "-c" (tol'ko kompilyaciya). V etom sluchae rezul'tat napravlyaetsya ne na vhod dc, a v standartnyj fajl vyvoda. FAJLY: /usr/lib/lib.b matematicheskaya biblioteka DOPOLNITELXNYE SSYLKI : dc Imeetsya otdel'noe opisanie bc. ZAMECHANIYA: Otsutstvuyut operacii &&, || i !. Operator for dolzhen imet' vse tri vyrazheniya. Operator quit srabatyvaet pri schityvanii, a ne pri vypolnenii. 38 APK 00210-01 33 01-4 IMYA: cal - pechat' kalendarya FORMAT: cal [mesyac] god OPISANIE: Komanda cal vydaet kalendar' ukazannogo goda. Esli zadan god i mesyac, vydaetsya kalendar' tol'ko dlya etogo mesyaca. "god" mozhet byt' v predelah ot 1 do 9999. "me- syac" yavlyaetsya chislom ot 1 do 12. ZAMECHANIYA: Ispol'zovanie dannoj komandy dlya polucheniya otvetov na voprosy tipa: "Na kakoj den' nedeli prihodil's' 2 yan- varya 1928 goda?" mozhet okazat'sya nepravomernym, tak kak v programme ne uchityvayutsya nekotorye istoricheskie fakty. Bud'te vnimatel'ny: "cal 78" otnositsya k rannej hris- tianskoj ere, a ne k XX stoletiyu. 39 APK 00210-01 33 01-4 IMYA: calendar - "elektronnyj" ezhednevnik FORMAT: calendar [-] OPISANIE: Komanda calendar prosmatrivaet fajl "calendar" v teku- shchem spravochnike i vydaet vse stroki, soderzhashie segod- nyashnyuyu ili zavtrashnyuyu datu. Daty mogut zadavat'sya v vide: "mesyac.den'", naprimer, "12/7", no ne "7 dekab- rya" ili "7/12". V konce nedeli ponyatie "zavtra" vklyu- chaet i ponedel'nik. Kogda prisutstvuet klyuch "-", komanda calendar prodely- vaet ukazannuyu rabotu dlya kazhdogo pol'zovatelya, ime- yushchego v svoem registracionnom spravochnike fajl "calendar", i posylaet emu rezul'tat, esli on imeetsya, s pomoshch'yu mail. Obychno eto delaetsya v nochnye chasy ezhednevno pod upravleniem cron. FAJLY: calendar ezhednevnik /usr/lib/calendar generator poiskovyh klyuchej /etc/passwd /tmp/cal* vremennyj fajl Ispol'zuyutsya: egrep, sed, mail DOPOLNITELXNYE SSYLKI : at, cron, mail 40 APK 00210-01 33 01-4 ZAMECHANIYA: Rasshirenie ponyatiya "zavtra" v komande calendar ne ot- nositsya k dnyam, idushchim posle prazdnikov. 41 APK 00210-01 33 01-4 IMYA: cat - vydacha soderzhimogo fajlov. FORMAT: cat [-] [-u] fajl... OPISANIE: Komanda cat posledovatel'no schityvaet kazhdyj "fajl" i zapisyvaet rezul'tat v standartnyj fajl vyvoda. Tak, komanda: cat file raspechatyvaet ukazannyj fajl, a komanda cat file1 file2 > file3 ob'edinyaet pervye dva fajla i pomeshchaet rezul'tat v tretij fajl. Esli vhodnye fajly ne ukazany ili zadan klyuch "-", is- pol'zuetsya standartnyj fajl vvoda. Neobyazatel'nyj pa- rametr "-u" ukazyvaet na neobhodimost' podavleniya obychno vypolnyaemoj cat buferizacii. DOPOLNITELXNYE SSYLKI : pr, cp ZAMECHANIYA: Bud'te ostorozhny i ne ispol'zujte komand vida "cat a b > a" i "cat" a b > b", kotorye razrushayut vhodnye fajly pered schityvaniem. 42 APK 00210-01 33 01-4 IMYA: cb - oformlenie Si-programm FORMAT: cb OPISANIE: Komanda cb perepisyvaet kopiyu C-programmy iz stan- dartnogo fajla vvoda v standartnyj fajl vyvoda s pro- belami i otstupami, otobrazhayushchimi strukturu programmy. 43 APK 00210-01 33 01-4 IMYA: cc - vyzov kompilyatora s yazyka Si FORMAT: cc [klyuch]... fajl... OPISANIE: Komanda cc prednaznachena dlya vyzova kompilyatora s yazy- ka Si. Ona vosprinimaet parametry neskol'kih tipov. Parametry, imena kotoryh zakanchivayutsya na ".c", schita- yutsya ishodnymi programmami na yazyke Si.Oni kompiliru- yutsya i kazhdaya ob'ektnaya programma ostaetsya v fajle, imya kotorogo poluchaetsya iz imeni sootvetstvuyushchego is- hodnogo fajla posle zameny ".c" na ".o". Fajl ".o" udalyaetsya, esli odna Si-programma kompiliruetsya i zag- ruzhaetsya v odnom prohode. Analogichno parametry, ch'i imena zakanchivayutsya na ".s", schitayutsya ishodnymi programmami na yazyke assemblera i assembliruyutsya, v rezul'tate chego poluchayutsya fajly ".o". V komande cc mogut zadavat'sya sleduyushchie klyuchi: -c Otmenyaet fazu sborki i vyzyvaet generaciyu ob'ektnogo koda dazhe togda, kogda kompiliruetsya tol'ko odna programma; -f Ukazanie o tom, chto na mashine otsutstvuet FPP- processor. V etom sluchae vmeste s programmoj 44 APK 00210-01 33 01-4 zagruzhayutsya neobhodimye podprogrammy iz bibli- oteki emulyacii FPP-processora; -p Vklyuchenie profilirovaniya programmy. Standartnaya programma zapuska zamenyaetsya programmoj, kotoraya pri zapuske avtomaticheski vyzyvaet monitor (2) i organizuet vyvod fajla mon.out pri normal'nom zavershenii vypolneniya ob'ektnoj programmy. Posle etogo mozhet byt' postroen grafik vypolneniya s pomoshch'yu komandy prof; -d Generaciya koda i dopolnitel'noj informacii dlya otladchika "cdeb"; -O Vklyuchenie fazy optimizacii ob'ektnogo koda; -S Kompiliruet perechislennye Si-programmy i ostav- lyaet rezul'tat raboty v vide assemblernogo teksta v sootvetstvuyushchih fajlah s suffiksami ".s"; -e Zapuskaet tol'ko makroprocessor dlya perechislen- nyh Si-programm i vydaet rezul'tat v standartnyj fajl vyvoda. Dlya ispol'zovaniya rezul'tata v pos- leduyushchih vyzovah "cc" nuzhno obrabotat' rezul'tat redaktorom "sed" po sleduyushchej programme: "s/^# /# line/"; -a Blokiruetsya vyzov makroprocessora "cpp". Flag ispol'zuetsya, esli vhodnoj tekst uzhe proshel ob- rabotku preprocessorom; 45 APK 00210-01 33 01-4 -P Kazhdyj fajl, imya kotorogo imeet suffiks ".c" ob- rabatyvaetsya tol'ko makroprocessorom "cpp", rezul'tat raboty kotorogo