ртпзтбннйтпчбойе об shell (UNIX) (хЮЕВОПЕ РПУПВЙЕ) (У) б. уПМПЧШЕЧ 1. ччедеойе уТЕДЙ ПРЕТБГЙПООЩИ УЙУФЕН ПУПВПЕ НЕУФП ЪБОЙНБЕФ Unix. вЕУРТЕГЕДЕОФОЩН СЧМСЕФУС ФП, ЮФП пу Unix НПЦЕФ ТБВПФБФШ РТБЛФЙЮЕУЛЙ ОБ ОБ ЧУЕИ ЧЩРХУЛБЕНЩИ РМБФЖПТНБИ. UNIX - ЬФП УФБОДБТФ ДЕ ЖБЛФП ПФЛТЩФЩИ Й НПВЙМШОЩИ ПРТЕТБГЙПООЩИ УЙУФЕН. (РПУЛПМШЛХ ОБЪЧБОЙЕ UNIX ЪБРБФЕОФПЧБОП ЛПНРБОЙЕК AT&T - ТБЪМЙЮОЩЕ АОЙЛУЩ ОБЪЩЧБАФУС ТБЪМЙЮОП: SCO UNIX, BSDI, Solaris, Linux, DG/UX, AIX Й Ф.Д.). ьФП ОЕ ФПМШЛП НОПЗПЪБДБЮОБС, ОП Й НОПЗПРПМШЪПЧБФЕМШУЛБС УЙУФЕНБ. пОБ ПВЕУРЕЮЙЧБЕФ УПЧТЕНЕООЩК РПМШЪПЧБФЕМШУЛЙК ЙОФЕТЖЕКУ ОБ ВБЪЕ УЙУФЕНЩ X Window Й НЕЦНБЫЙООХА УЧСЪШ ОБ ВБЪЕ РТПФПЛПМПЧ TCP/IP Й Ф.Р. пу Unix ВЩМБ УПЪДБОБ лЕОПН фПНРУПОПН Й дЕООЙУПН тЙФЮЙ Ч Bell Laborotories (AT&T). ыЙТПЛП ТБУРТПУФТБОСФШУС Unix/v7 (ЧЕТУЙС 7) ОБЮБМБ Ч 79 - 80-Н ЗПДБИ. чТХЮЕОЙЕ УПЪДБФЕМСН Unix Ч 1983 ЗПДХ нЕЦДХОБТПДОПК РТЕНЙЙ б.фШАТЙОЗБ Ч ПВМБУФЙ РТПЗТБННЙТПЧБОЙС ПЪОБНЕОПЧБМП РТЙЪОБОЙЕ ЬФПК УЙУФЕНЩ НЙТПЧПК ОБХЮОПК (computer science) ПВЭЕУФЧЕООПУФША. юФП ФБЛЦЕ ВЕУРТЕГЕДЕОФОП. уЛПМШЛП ПРЕТБГЙПООЩИ УЙУФЕН ЧЪПЫМП Й ЪБЫМП ОБ ЛПНРШАФЕТОПН ОЕВПУЛМПОЕ ЪБ ЧТЕНС УХЭЕУФЧПЧБОЙС UNIX! пу Unix УФПЙФ ОБ ФТЕИ ЛЙФБИ: СЪЩЛ уЙ, ЖБКМПЧБС УЙУФЕНБ, ЛПНБОДОЩК СЪЩЛ. ч ДБМШОЕКЫЕН Л ОЙН ДПВБЧЙМЙУШ УЙУФЕНБ X Window Й РТПФПЛПМЩ TCP/IP. сЪЩЛ уЙ, ОБ ЛПФПТПН ОБРЙУБОБ УБНБ ПРЕТБГЙПООБС УЙУФЕНБ, У ПДОПК УФПТПОЩ, УПЮЕФБЕФ Ч УЕВЕ УЧПКУФЧБ СЪЩЛБ ЧЩУПЛПЗП ХТПЧОС: ПРЙУБОЙЕ ФЙРПЧ, РТПЗТБННОЩЕ УФТХЛФХТЩ if, for, while Й Ф.Р., Б У ДТХЗПК - УПДЕТЦЙФ УТЕДУФЧБ, РТЙУХЭЙЕ ПВЩЮОП СЪЩЛБН ХТПЧОС БУУЕНВМЕТБ: ТЕЗЙУФТПЧЩЕ РЕТЕНЕООЩЕ, БДТЕУОХА (УУЩМПЮОХА) БТЙЖНЕФЙЛХ, ЧПЪНПЦОПУФЙ ТБВПФЩ У РПМСНЙ ВЙФ Й ПФДЕМШОЩНЙ ВЙФБНЙ Й Ф.Р. 2. жбкмпчбс уйуфенб жБКМПЧБС УЙУФЕНБ пу Unix ЙНЕЕФ ЙЕТБТИЙЮЕУЛХА (ДТЕЧПЧЙДОХА) УФТХЛФХТХ. ч ЧЕТЫЙОБИ ДЕТЕЧБ ОБИПДСФУС ЛБФБМПЗЙ (ЙУРПМШЪХАФ ФБЛЦЕ ФЕТНЙОЩ - УРТБЧПЮОЙЛЙ, ДЙТЕЛФПТЙЙ), УПДЕТЦБЭЙЕ УРЙУЛЙ ЖБКМПЧ. ьФЙ ЖБКМЩ Ч УЧПА ПЮЕТЕДШ НПЗХФ ВЩФШ МЙВП УОПЧБ ЛБФБМПЗБНЙ, МЙВП ПВЩЮОЩНЙ ЖБКМБНЙ, МЙВП УРЕГЙБМШОЩНЙ ЖБКМБНЙ, РТЕДУФБЧМСАЭЙНЙ ТБЪМЙЮОЩЕ ХФТПКУФЧБ ЧЧПДБ-ЧЩЧПДБ. / | ----------------------------------------------------------- | | | | | | | | | | bin boot dev etc lib mnt sys . . . tmp unix usr KПТОЕЧПК ЛБФБМПЗ ЙНЕЕФ ЙНС "/". пО ПВЩЮОП УПДЕТЦЙФ ЛБФБМПЗЙ: bin - ДМС ОБЙВПМЕЕ ЙУРПМШЪХЕНЩИ ЛПНБОД; usr - ЛБФБМПЗЙ Й ПВЩЮОЩЕ ЖБКМЩ, УПДЕТЦБЭЙЕ ЙОЖПТНБГЙА, РТЙЧМЕЛБЕНХА РТЙ ТЕЫЕОЙЙ ЪБДБЮ РПМШЪПЧБФЕМС; dev - ДМС УРЕГЙБМШОЩИ ЖБКМПЧ, РТЕДУФБЧМСАЭЙИ ХУФТПКУФЧБ (ДЙУРМЕЙ, ДЙУЛЙ...); etc - ДМС ИТБОЕОЙС ЛПНБОД БДНЙОЙУФТБФПТБ УЙУФЕНЩ; lib - ЧБЦОЕКЫЙЕ ВЙВМЙПФЕЛЙ; mnt - ДМС РПДЛМАЮЕОЙС (РТЙНПОФЙТПЧБОЙС) ОПЧЩИ ЖБКМПЧЩИ УЙУФЕН; sys - УТЕДУФЧБ ДМС ЙЪНЕОЕОЙС ЛПОЖЙЗХТБГЙЙ УЙУФЕНЩ; tmp - ДМС ИТБОЕОЙС ЧТЕНЕООЩИ ЖБКМПЧ; usr - ЛБФБМПЗЙ Й ПВЩЮОЩЕ ЖБКМЩ, УПДЕТЦБЭЙЕ ЙОЖПТНБГЙА, РТЙЧМЕЛБЕНХА РТЙ ТЕЫЕОЙЙ ЪБДБЮ РПМШЪПЧБФЕМС. б ФБЛЦЕ ПВЩЮОЩЕ (ЧЩРПМОСЕНЩЕ) ЖБКМЩ: unix - СДТП; boot - ЪБЗТХЪЮЙЛ. рПМОЩЕ ЙНЕОБ ЖБКМПЧ ВХДХФ: /bin, /usr, ..., /unix, /boot. ч УЧПА ПЮЕТЕДШ ЬФЙ ЛБФБМПЗЙ НПЗХФ УПДЕТЦБФШ ЛБФБМПЗЙ УМЕДХАЭЕЗП ХТПЧОС. оБРТЙНЕТ, ЛБФБМПЗ "usr", ЛТПНЕ РТПЮЕЗП, УПДЕТЦЙФ ЛБФБМПЗЙ: bin - ИТБОЙФ ДПРПМОЙФЕМШОЩЕ ЛПНБОДЩ; games - ЙЗТЩ; include - ИТБОЙФ ЖТБЗНЕОФЩ УЙУФЕНОЩИ РТПЗТБНН; lib - ИТБОЙФ ДПРПМОЙФЕМШОЩЕ ВЙВМЙПФЕЛЙ. РПМОЩЕ ЙНЕОБ ЬФЙИ ЖБКМПЧ ВХДХФ: /usr/bin /usr/games /usr/include /usr/lib еУМЙ Ч ЛБФБМПЗЕ "/usr/include" УПДЕТЦЙФУС ЛБФБМПЗ "sys", ЛПФПТЩК Ч УЧПА ПЮЕТЕДШ, УПДЕТЦЙФ ЛБФБМПЗ "conf", ФП РПМОПЕ ЙНС ЖБКМБ "conf" ВХДЕФ /usr/include/sys/conf жПТНБМШОЩН РТЙЪОБЛПН РПМОПЗП ЙНЕОЙ СЧМСЕФУС ФП, ЮФП ПОП ОБЮЙОБЕФУС УП УМЬЫБ ("/"). пФОПУЙФЕМШОПЕ ЙНС ОБЮЙОБЕФУС ОЕ У "/", Й ПРТЕДЕМСФ ЙНС ПФОПУЙФЕМШОП УЧПЕЗП НЕУФПРПМПЦЕОЙС. еУМЙ (РПМШЪПЧБФЕМ?) Ч ДБООЩК НПНЕОФ ОБИПДЙФУС Ч ДЙТЕЛФПТЙЙ /usr ЖБКМПЧПК УЙУФЕНЩ, ФП ПО НПЦЕФ ПВТБФЙФШУС Л ЬФПНХ ЦЕ ЖБКМХ РП ПФОПУЙФЕМШОПНХ ЙНЕОЙ include/sys/conf еУФШ ДЧБ УРЕГЙБМШОЩИ ЙНЕОЙ: . - ЬФП "ЙНС" ФЕЛХЭЕЗП ДЙТЕЛФПТЙС Й .. - ЬФП "ЙНС" ТПДЙФЕМШУЛПЗП ДЙТЕЛФПТЙС (Ф.Е. ДЙТЕЛФПТЙС, ОБИПДСЭЕЗПУС ОБ УФХРЕОШЛХ ЧЩЫЕ ДБООПЗП ОБ РХФЙ Л ЛПТОА). ч ЛБЮЕУФЧЕ ЙНЕОЙ ЖБКМБ ЛБЛ РТБЧЙМП НПЦЕФ ЙУРПМШЪПЧБФШУС МАВБС РПУМЕДПЧБФШЕМШОПУФШ ЙЪ ВХЛЧ, ГЙЖТ Й РПДЮЕТЛЙЧБОЙК. нПЗХФ ЙУРПМШЪПЧБФШУС Й ДТХЗЙЕ УЙНЧПМЩ, ПДОБЛП ТСД ЬФЙИ УЙНЧПМПЧ РТЙ ЙУРПМШЪПЧБООЙЙ Ч ЙНЕОЙ ФТЕВХЕФ УРЕГЙБМШОПЗП ЬЛТБОЙТПЧБОЙС. (мХЮЫЕ ОЕ РПМШЪПЧБФШУС УРЕГЙБМШОЩНЙ УЙНЧПМБНЙ Ч ЙНЕОБИ - ЙОПЗДБ ЬФП НПЦЕФ РТЙЧЕУФЙ Л УМПЦОПУФСН Ч ПВТБЭЕОЙЙ Л ФБЛЙН ЙНЕОБН, РПУЛПМШЛХ УРЕГУЙНЧПМЩ НПЗХФ ЙНЕФШ Ч shell ОЕЛПФПТЩК УРЕГЙБМШОЩК УНЩУМ). ч ТСДЕ УЙУФЕН ДМЙОБ ЙНЕОЙ ПЗТБОЙЮЙЧБЕФУС 14-А УЙНЧПМБНЙ (ЬФПЗП ПЗТБОЙЮЕОЙС ЦЕМБФЕМШОП РТЙДЕТЦЙЧБФШУС ДМС РЕТЕОПУЙНПУФЙ ЖБКМПЧ), ПДОБЛП Ч ДТХЗЙИ УЙУФЕНБИ ДПРХУЛБАФУС ВПМЕЕ ДМЙООЩЕ ЙНЕОБ - ОБРТЙНЕТ, ДП 256 УЙНЧПМПЧ. ч ПВЭЕН УМХЮБЕ ОЕ СЧМАФУС ПВСЪБФЕМШОЩНЙ Й ЛБЛЙЕ-ФП ТБУЫЙТЕОЙС Ч ЙНЕОБИ. иПФС ТСД ЛПНБОД ФТЕВХАФ ОБМЙЮЙС ОЕЛПФПТЩИ ЖЙЛУЙТПЧБООЩИ ТБУЫЙТЕОЙК Ч ЙНЕОБИ, ОБРТЙНЕТ ТБУЫЙТЕОЙЕ ".У" ДМС ЙУИПДОЩИ ЖБКМПЧ ДМС уЙ-ЛПНРЙМСФПТБ. луфбфй. ч пу UNIX ВПМШЫЙЕ Й НБМЕОШЛЙЕ ВХЛЧЩ ЧПУРТЙОЙНБАФУС ЛБЛ ТБЪМЙЮОЩЕ, РПЬФПНХ "FILE", "file" Й "File" - ЬФП ФТЙ ТБЪМЙЮОЩИ ЙНЕОЙ! чбцопе ъбнеюбойе. пФДЕМШОЩЕ ЮБУФЙ ЖБКМПЧПК УЙУФЕНЩ НПЗХФ ОБИПДЙФШУС ОБ ТБЪМЙЮОЩИ ЖЙЪЙЮЕУЛЙИ ХУФТПКУФЧБИ, ОБРТЙНЕТ, ОБ ОЕУЛПМШЛЙИ ЦЕУФЛЙИ Й ЗЙВЛЙИ ДЙУЛБИ (ЙМЙ Ч ТБЪМЙЮОЩИ ЮБУФСИ ПДОПЗП ДЙУЛБ). уППФЧЕФУЧХАЭЙЕ ЖТБЗНЕОФЩ (РПДДЕТЕЧШС ЖБКМПЧПК УЙУФЕНЩ) НПОФЙТХАФУС (РТЙУПЕДЙОСАФУС) Ч ЕДЙОХА ЖБКМПЧХА УЙУФЕНХ ЛПНБОДПК mount (ПВЩЮОП ЬФП ЖХОЛГЙС БДНЙОЙУФТБФПТБ УЙУФЕНЩ), РПУМЕ ЮЕЗП РПМШЪПЧБФЕМШ НПЦЕФ ПВТБЭБФШУС Л МАВЩН ДПУФХРОЩН ЖБКМБН, РТЙ ЬФПН Ч ЙНЕОЙ ОЙЛБЛ ОЕ ПФТБЦБЕФУС ХУФТПКУФЧП, ОБ ЛПФПТПН ЖБКМ ОБИПДЙФУС ЙМЙ УПЪДБЕФУС (Ф.Е. ОЙЛБЛЙИ "A:"). лПНБОДОЩК СЪЩЛ пу Unix - shell ПРЕТЙТХЕФ У ЛПНБОДБНЙ. вПМЕЕ РПДТПВОП П ОЕН ТБЪЗПЧПТ ДБМЕЕ, Б РПЛБ ТБУУНПФТЙН ОЕУЛПМШЛП ЛПНБОД ТБВПФЩ У ЖБКМПЧПК УЙУФЕНПК. оБРТЙНЕТ, Ч ТЕЪХМШФБФЕ ЧЩРПМОЕОЙС ЛПНБОДЩ ls -l /usr ЗДЕ ls - ЙНС ЛПНБОДЩ; -l - ЖМБЗ, ЗПЧПТСЭЙК П ФПН, ЮФП ЧЩДБЮБ ДПМЦОБ ВЩФШ Ч ДМЙООПН ЖПТНБФЕ; /usr -ЙНС ЛБФБМПЗБ, ЛПФПТЩК ОБДП echo. оБ ЬЛТБО ВХДЕФ ЧЩЧЕДЕОП drwxrwxr-x 2 root 2048 nov 3 12:11 bin -rwxr--r-- 1 root 861 may 11 20:11 boot drwxrwxr-x 2 root 1024 jan 9 11:55 dev drwxrwxr-x 1 root 4096 may 11 20:11 dos drw-r--r-- 3 root 4096 nov 17 12:01 include drwxr-xr-x 7 root 480 nov 17 12:30 lib рЕТЧБС УФТПЛБ ПЪОБЮБЕФ, ЮФП ЬФП ЛБФБМПЗ (d-directory), ЗДЕ РЕТЧБС ФТЙБДБ "rwx" ТБЪТЕЫБЕФ ЧМБДЕМШГХ ЛБФБМПЗБ: r - ЮЙФБФШ, w - РЙУБФШ Й И - ЧЩРПМОСФШ (ВПМЕЕ ФПЮОП, ДМС ЖБКМПЧ ФЙРБ ЛБФБМПЗ w ПЪОБЮБЕФ ТБЪТЕЫЕОЙЕ УПЪДБЧБФШ ЖБКМЩ Ч ЛБФБМПЗЕ Й ХДБМСФШ ЙИ ЙЪ ОЕЗП, Б И ТБЪТЕЫБЕФ ДПУФХР Л ЖБКМБН ЛБФБМПЗБ); ЮМЕОБН ЗТХРРЩ, Ч ЛПФПТХА ЧИПДЙФ ЧМБДЕМЕГ, ФБЛЦЕ ТБЪТЕЫЕОЩ ЧУЕ ФТЙ ПРЕТБГЙЙ. рПУМЕДОСС ФТЙБДБ ПФТБЦБЕФ РТБЧБ ДПУФХРБ РТПЮЙИ РПМШЪПЧБФЕМЕК, ЛПФПТЩН ТБЪТЕЫЕОП ФПМШЛП ЮЙФБФШ Й ЧЩРПМОСФШ (ЪБРТЕЭЕОП РЙУБФШ Ч ЬФПФ ЖБКМ, Ф.Е. ЙЪНЕОСФШ УПДЕТЦЙНПЕ ЛБФБМПЗБ). дБМЕЕ, 2 - ЬФП ЮЙУМП УЧСЪЕК ЖБКМБ (Ф.Е. ЗДЕ-ФП Ч УЙУФЕНЕ ЕУФШ ЕЭЕ ПДОП ЙНС, УЧСЪБООПЕ У ЬФЙН ЖБКМПН); root - ЙНС ЧМБДЕМШГБ, 2048 - ЮЙУМП УЙНЧПМПЧ Ч ЖБКМЕ, nov 3 12:11 - ДБФБ Й ЧТЕНС УПЪДБОЙС ЙМЙ РПУМЕДОЕК НПДЙЖЙЛБГЙЙ ЖБКМБ (3 ОПСВТС Ч 12-11); bin - ЙНС ЖБКМБ (ЛБФБМПЗ ЛПНБОД). чП ЧФПТПК УФТПЛЕ ХЛБЪБО ПВЩЮОЩК ФЕЛУФПЧЩК ЖБКМ (boot), ЛПФПТЩК РТПЮЙЕ РПМШЪПЧБФЕМЙ НПЗХФ ФПМШЛП ЮЙФБФШ. лПНБОДБ "pwd" (ВЕЪ ЖМБЗПЧ Й БТЗХНЕОФПЧ) УППВЭБЕФ НЕУФПРПМПЦЕОЙЕ РПМШЪПЧБФЕМС Ч ЖБКМПЧПК УЙУФЕНЕ. у ЕЕ РПНПЭША ЧЩЧПДЙФУС РПМОПЕ ЙНС ФЕЛХЭЕЗП ЛБФБМПЗБ. рТЙ ЧИПДЕ Ч УЙУФЕНХ РПМШЪПЧБФЕМШ ПЛБЪЩЧБЕФУС Ч ПРТЕДЕМЕООПК ЪБТБОЕЕ ЧЕТЫЙОЕ ДЕТЕЧБ. рХУФШ, ОБРТЙНЕТ, ЬФП ВХДЕФ ЛБФБМПЗ "/usr". йЪНЕОЙФШ НЕУФПОБИПЦДЕОЙЕ НПЦОП ЛПНБОДПК "cd ". фБЛ НПЦОП РЕТЕКФЙ Ч ЛБФБМПЗ /usr/include/sys, ОБВТБЧ ЛПНБОДХ cd /usr/include/sys ЪДЕУШ ХЛБЪБОП РПМОПЕ ЙНС , ЙМЙ cd include/sys ЪДЕУШ ХЛБЪБОП ПФОПУЙФЕМШОПЕ ЙНС. пФМЙЮЙФЕМШОЩК РТЙЪОБЛ ПФОПУЙФЕМШОПЗП ЙНЕОЙ - ПФУХФУФЧЙЕ УЙНЧПМБ "/" Ч ОБЮБМЕ. лПНБОДБ "cd .." ПУХЭЕУФЧЙФ РЕТЕИПД ЧЧЕТИ ОБ РТЕДЩДХЭЙК ХТПЧЕОШ. йЪ "/usr/include/sys" РТПЙЪПКДЕФ РЕТЕИПД Ч "/usr/include", Б ЛПНБОДБ "cd" (Ф.Е. ВЕЪ РБТБНЕФТПЧ) ПУХЭУФЧЙФ РЕТЕИПД Ч ОБЮБМШОЩК ДЙТЕЛФПТЙК РПМШЪПЧБФЕМС (Ф.Е. ДЙТЕЛФПТЙК, Ч ЛПФПТПН РПМШЪПЧБФЕМШ ПЛБЪЩЧБЕФУС РТЙ ЧИПДЕ Ч УЙУФЕНХ). уПЪДБФШ ОПЧЩЕ ЛБФБМПЗЙ НПЦОП У РПНПЭША ЛПНБОДЩ mkdir фБЛ ЛПНБОДБ "mkdir err new" УПЪДБУФ Ч ДБООПН ЛБФБМПЗЕ ДЧБ ОПЧЩИ ЛБФБМПЗБ У ПФОПУЙФЕМШОЩНЙ ЙНЕОБНЙ "err" Й "new". хДБМЙФШ РХУФПК (ОЕ УПДЕТЦБЭЙК ЖБКМПЧ) ЛБФБМПЗ НПЦОП У РПНПЭША ЛПНБОДЩ rmdir хДБМЙФШ ПВЩЮОЩК ЖБКМ НПЦОП ЛПНБОДПК rm оБЙВПМЕЕ ЕУФЕУФЧЕООЩК ДМС РПМШЪПЧБФЕМС УРПУПВ УПЪДБОЙС ЖБКМПЧ - ЬФП ЙУРПМШЪПЧБОЙЕ ФЕЛУФПЧПЗП ТЕДБЛФПТБ "ed" ЙМЙ ЬЛТБООПЗП ТЕДБЛФПТБ "red" (Б ФБЛЦЕ УФБОДБТФОЩИ "vi" Й "ЕИ", ЙМЙ НОПЗПЮЙУМЕООЩИ РТПЮЙИ "ЖЙТНЕООЩИ"). ч пу Unix ПЛПМП 200 ВБЪПЧЩИ ЛПНБОД - ЙОУФТХНЕОФБМШОЩИ УТЕДУФЧ, РПЪЧПМСАЭЙИ РПМШЪПЧБФЕМА ТЕЫБФШ НОПЗЙЕ УЧПЙ РТПВМЕНЩ, ОЕ РТЙВЕЗБС Л РТПЗТБННЙТПЧБОЙА ОБ СЪЩЛБИ ФЙРБ уЙ ЙМЙ ЙУРПМШЪПЧБОЙА УРЕГЙБМШОЩИ РБЛЕФПЧ. лПНБОДПК rm ЖБКМ-1 НПЦОП ХДБМЙФШ "ЖБКМ-1". лПНБОДПК rmdir ЖБКМ-1 НПЦОП ХДБМЙФШ "ЖБКМ-1", ЕУМЙ ЬФП ДЙТЕЛФПТЙК, РТЙЮЕН РХУФПК (Ф.Е. ОЕ УПДЕТЦЙФ ЖБКМПЧ). лПНБОДПК mv УФБТПЕ-ЙНС ОПЧПЕ-ЙНС НПЦОП РЕТЕОБЪЧБФШ ЖБКМ. лПНБОДПК cp УФБТПЕ-ЙНС ОПЧПЕ-ЙНС НПЦОП УЛПРЙТПЧБФШ ЖБКМ (УПИТБОЙЧ ФБЛЦЕ УФБТЩК). пЮЕОШ ЧБЦОБ ЛПНБОДБ chmod 755 ТБУЮЕФ ЛПФПТБС РТЕЧТБЭБЕФ ЖБКМ "ТБУЮЕФ", РПДЗПФПЧМЕООЩК Ч ТЕДБЛФПТЕ, Ч ЛПНБОДОЩК, ЙОБЮЕ "ТБУЮЕФ" РТЙ РПРЩФЛЕ ЧЩЪПЧБ ОЕ ВХДЕФ ЧЩРПМОСФУС. оБВПТ ГЙЖТ ЪДЕУШ УППФЧЕФУЧХЕФ ФТЙБДБН ДЧПЙЮОЩИ РТЕДУФБЧМЕОЙК ЧПУШНЕТЙЮОЩИ ЮЙУЕМ Й ФТЙБДБН РТБЧ ДПУФХРБ Л ЖБКМБН (rwx - ЮФЕОЙЕ, ЪБРЙУШ, ЧЩРПМОЕОЙЕ). фП ЕУФШ ПРТЕДЕМСЕФ, ЮФП УПЪДБФЕМШ ТБУЮЕФБ НПЦЕФ ОЕ ФПМШЛП ЧЩРПМОЙФШ ЙМЙ ТБУРЕЮБФБФШ ФЕЛУФ ЬФПЗП ТБУЮЕФБ, ОП Й ЧОПУЙФШ Ч ОЕЗП ЙЪНЕОЕОЙС (7:111 - rwx). б ЮМЕОЩ ЗТХРРЩ Й РТПЮЙЕ РПМШЪПЧБФЕМЙ НПЗХ ФПМШЛП ЮЙФБФШ Й ЧЩРПМОСФШ, ОП ОЕ НПЗХФ ЙЪНЕОСФШ ЬФПФ ТБУЮЕФ (55:101101 - r-xr-x). 3. ртпуфекыйе утедуфчб SHELL лПНБОДОЩК СЪЩЛ shell (Ч РЕТЕЧПДЕ - ТБЛПЧЙОБ, УЛПТМХРБ) ЖБЛФЙЮЕУЛЙ ЕУФШ СЪЩЛ РТПЗТБННЙТПЧБОЙС ПЮЕОШ ЧЩУПЛПЗП ХТПЧОС. оБ ЬФПН СЪЩЛЕ РПМШЪПЧБФЕМШ ПУХЭЕУФЧМСЕФ ХРТБЧМЕОЙЕ ЛПНРШАФЕТПН. пВЩЮОП, РПУМЕ ЧИПДБ Ч УЙУФЕНХ ЧЩ ОБЮЙОБЕФЕ ЧЪБЙНПДЕКУФЧПЧБФШ У ЛПНБОДОПК ПВПМПЮЛПК (ЕУМЙ ХЗПДОП - ПОБ ОБЮЙОБЕФ ЧЪБЙНПДЕКУФЧПЧБФШ У ЧБНЙ). рТЙЪОБЛПН ФПЗП, ЮФП ПВПМПЮЛБ (shell) ЗПФПЧБ Л РТЙЕНХ ЛПНБОД УМХЦЙФ ЧЩДБЧБЕНЩК ЕА ОБ ЬЛТБО РТПНРФЕТ. ч РТПУФЕКЫЕН УМХЮБЕ ЬФП ПДЙО ДПММБТ ("$"). Shell ОЕ СЧМСЕФУС ОЕПВИПДЙНЩН Й ЕДЙОУФЧЕООЩН ЛПНБОДОЩН СЪЩЛПН (ИПФС ЙНЕООП ПО УФБОДБТФЙЪПЧБО Ч ТБНЛБИ POSIX [POSIX 1003.2] - УФБОДБТФБ НПВЙМШОЩИ УЙУФЕН). оБРТЙНЕТ, ОЕНБМПК РПРХМСТОПУФША РПМШЪХЕФУС СЪЩЛ cshell, ЕУФШ ФБЛЦЕ kshell, bashell (ЙЪ ОБЙВПМЕЕ РПРХМСТОЩИ Ч РПУМЕДОЕЕ ЧТЕНС) Й ДТХЗЙЕ. вПМЕЕ ФПЗП, ЛБЦДЩК РПМШЪПЧБФЕМШ НПЦЕФ УПЪДБФШ УЧПК ЛПНБОДОЩК СЪЩЛ. нПЦЕФ ПДОПЧТЕНЕООП ОБ ПДОПН ЬЛЪЕНРМСТЕ ПРЕТБГЙПООПК УЙУФЕНЩ ТБВПФБФШ У ТБЪОЩНЙ ЛПНБОДОЩНЙ СЪЩЛБНЙ. пвтбфйфе чойнбойе. shell - ЬФП ПДОБ ЙЪ НОПЗЙИ ЛПНБОД UNIX. фП ЕУФШ Ч ОБВПТ ЛПНБОД ПВПМПЮЛЙ (ЙОФЕТРТЕФБФПТБ) "shell" ЧИПДЙФ ЛПНБОДБ "sh" - ЧЩЪПЧ ЙОФЕТРТЕФБФПТБ "shell". рЕТЧЩК "shell" ЧЩЪЩЧБЕФУС БЧФПНБФЙЮЕУЛЙ РТЙ ЧБЫЕН ЧИПДЕ Ч УЙУФЕНХ Й ЧЩДБЕФ ОБ ЬЛТБО РТПНФЕТ. рПУМЕ ЬФПЗП ЧЩ НПЦЕФЕ ЧЩЪЩЧБФШ ОБ ЧЩРПМОЕОЙЕ МАВЩЕ ЛПНБОДЩ, Ч ФПН ЮЙУМЕ Й УОПЧБ УБН "shell", ЛПФПТЩК ЧБН УПЪДБУФ ОПЧХА ПВПМПЮЛХ ЧОХФТЙ РТЕЦОЕК. фБЛ ОБРТЙНЕТ, ЕУМЙ ЧЩ РПДЗПФПЧЙФЕ Ч ТЕДБЛФПТЕ ЖБКМ "f1": echo Hello! ФП ЬФП ВХДЕФ ПВЩЮОЩК ФЕЛУФПЧЩК ЖБКМ, УПДЕТЦБЭЙК ЛПНБОДХ "echo", ЛПФПТБС РТЙ ЧЩРПМОЕОЙЙ ЧЩДБЕФ ЧУЕ ОБРЙУБООПЕ РТБЧЕЕ ЕЕ ОБ ЬЛТБО. нПЦОП УДЕМБФШ ЖБКМ "f1" ЧЩРПМОСЕНЩН У РПНПЭША ЛПНБОДЩ "chmod 755 f1". оП ЕЗП НПЦОП чщрпмойфш, ЧЩЪЧБЧ СЧОП ЛПНБОДХ (!) "sh" ("shell"): sh f1 ЙМЙ sh оБРТЙНЕТ: ls -ls /usr/bin ЗДЕ ls - ЙНС ЛПНБОДЩ ЧЩДБЮЙ УПДЕТЦЙНПЗП ДЙТЕЛФПТЙС, -ls - ЖМБЗЙ ( "-" - РТЙЪОБЛ ЖМБЗПЧ, l - ДМЙООЩК ЖПТНБФ, s - ПВ'ЕН ЖБКМПЧ Ч ВМПЛБИ). /usr/bin - ДЙТЕЛФПТЙК, ДМС ЛПФПТПЗП ЧЩРПМОСЕФУС ЛПНБОДБ. ьФБ ЛПНБОДБ ЧЩДБУФ ОБ ЬЛТБО Ч ДМЙООПН ЖПТНБФЕ УПДЕТЦЙНПЕ ДЙТЕЛФПТЙС /usr/bin, РТЙ ЬФПН ДПВБЧЙФ ЙОЖПТНБГЙА П ТБЪНЕТЕ ЛБЦДПЗП ЖБКМБ Ч ВМПЛБИ. л УПЦБМЕОЙА, ФБЛБС УФТХЛФХТБ ЛПНБОДЩ ЧЩДЕТЦЙЧБЕФУС ДБМЕЛП ОЕ ЧУЕЗДБ. оЕ ЧУЕЗДБ РЕТЕД ЖМБЗБНЙ УФБЧЙФУС НЙОХУ, ОЕ ЧУЕЗДБ ЖМБЗЙ ЙДХФ ПДОЙН УМПЧПН. еУФШ ТБЪОППВТБЪЙЕ Й Ч РТЕДУФБЧМЕОЙЙ БТЗХНЕОФПЧ. л ЮЙУМХ ЛПНБОД, ЙНЕАЭЙИ ЬЛЪПФЙЮЕУЛЙЕ ЖПТНБФЩ, ПФОПУСФУС Й ФБЛЙЕ "ИПДПЧЩЕ" ЛПНБОДЩ, ЛБЛ УУ, tar, dd, find Й ТСД ДТХЗЙИ. лБЛ РТБЧЙМП (ОП ОЕ ЧУЕЗДБ), РЕТЧПЕ УМПЧП (Ф.Е. РПУМЕДПЧБФЕМШОПУФШ УЙНЧПМПЧ ДП РТПВЕМБ, ФБВХМСГЙЙ ЙМЙ ЛПОГБ УФТПЛЙ) shell ЧПУРТЙОЙНБЕФ, ЛБЛ ЛПНБОДХ. рПЬФПНХ Ч ЛПНБОДОПК УФТПЛЕ cat cat РЕТЧПЕ УМПЧП ВХДЕФ ТБУЫЙЖТПЧБОП shell, ЛБЛ ЛПНБОДБ (ЛПОЛБФЕОБГЙЙ), ЛПФПТБС ЧЩДБУФ ОБ ЬЛТБО ЖБКМ У ЙНЕОЕН "cat" (ЧФПТПЕ УМПЧП), ОБИПДСЭЙКУС Ч ФЕЛХЭЕН ДЙТЕЛФПТЙЙ. 3.2. зТХРРЙТПЧЛБ ЛПНБОД. уТЕДУФЧБ ЗТХРРЙТПЧЛЙ: ; Й - ПРТЕДЕМСАФ РПУМЕДПЧБФЕМШОПЕ ЧЩРПМОЕОЙЕ ЛПНБОД; & - БУЙОИТПООПЕ (ЖПОПЧПЕ) ЧЩРПМОЕОЙЕ РТЕДЫЕУФЧХАЭЕК ЛПНБОДЩ; && - ЧЩРПМОЕОЙЕ РПУМЕДХАЭЕК ЛПНБОДЩ РТЙ ХУМПЧЙЙ ОПТНБМШОПЗП ЪБЧЕТЫЕОЙС РТЕДЩДХЭЕК, ЙОБЮЕ ЙЗОПТЙТПЧБФШ; || - ЧЩРПМОЕОЙЕ РПУМЕДХАЭЕК ЛПНБОДЩ РТЙ ОЕОПТНБМШОПН ЪБЧЕТЫЕОЙЙ РТЕДЩДХЭЕК, ЙОБЮЕ ЙЗОПТЙТПЧБФШ. рТЙ ЧЩРПМОЕОЙЙ ЛПНБОДЩ Ч БУЙОИТПООПН ТЕЦЙНЕ (РПУМЕ ЛПНБОДЩ УФПЙФ ПДЙО БНРЕТУЕОД) ОБ ЬЛТБО ЧЩЧПДЙФУС ОПНЕТ РТПГЕУУБ, УППФЧЕФУФЧХАЭЙК ЧЩРПМОСЕНПК ЛПНБОДЕ, Й УЙУФЕНБ, ЪБРХУФЙЧ ЬФПФ ЖПОПЧЩК РТПГЕУУ, ЧОПЧШ ЧЩИПДЙФ ОБ ДЙБМПЗ У РПМШЪПЧБФЕМЕН. оБРТЙНЕТ, ОБВЕТЕН (ЬЛЪПФЙЮЕУЛХА) ЛПНБОДХ "find" Ч ЖПОПЧПН ТЕЦЙНЕ ДМС РПЙУЛБ Ч УЙУФЕНЕ , ОБЮЙОБС ПФ ЛПТОС "/", ЖБКМБ У ЙНЕОЕН "conf", Б ЪБФЕН "pwd" Ч ПВЩЮОПН ТЕЦЙНЕ. оБ ЬЛТБОЕ ЬФПФ ЖТБЗНЕОФ ВХДЕФ ЧЩЗМСДЕФШ УМЕДХАЭЙН ПВТБЪПН: -------------------------------- | $ find / -name conf -print & | ЧЧПД ЛПНБОДЩ "find" | | | 288 | ОПНЕТ (PID) ЖПОПЧПЗП РТПГЕУУБ | | | $ pwd | ЧЧПД ЛПНБОДЩ "pwd" | | | /mnt/lab/asu | ТЕЪХМШФБФ ТБВПФЩ "pwd" | | | $ | ЧПЪЧТБЭЕОЙЕ shell Ч РТПНРФЕТ | | | /usr/include/sys/conf | ТЕЪХМШФБФ ТБВПФЩ "find" | | -------------------------------- йОПЗДБ ОЕПВИПДЙНП, ЮФПВЩ ЧУЕ ЖПОПЧЩЕ РТПГЕУУЩ ЪБЧЕТЫЙМЙУШ, РТЕЦДЕ ЮЕН ВХДЕФ ЧЩРПМОСФШУС ЛБЛПК-ФП ТБУЮЕФ. дМС ЬФПЗП УМХЦЙФ УРЕГЙБМШОБС ЛПНБОДБ "wait [PID]". ьФБ ЛПНБОДБ ЦДЕФ ЪБЧЕТЫЕОЙС ХЛБЪБООПЗП ЙДЕОФЙЖЙЛБФПТПН (ЮЙУМПН) ЖПОПЧПЗП РТПГЕУУБ. еУМЙ ЛПНБОДБ ВЕЪ РБТБНЕФТБ, ФП ПОБ ЦДЕФ ЪБЧЕТЫЕОЙС ЧУЕИ ЖПОПЧЩИ РТПГЕУУПЧ, ДПЮЕТОЙИ ДМС ДБООПЗП "sh". дМС ЗТХРРЙТПЧЛЙ ЛПНБОД ФБЛЦЕ НПЗХФ ЙУРПМШЪПЧБФШУС ЖЙЗХТОЩЕ "{}" Й ЛТХЗМЩЕ "()" УЛПВЛЙ. тБУУНПФТЙН РТЙНЕТЩ, УПЮЕФБАЭЙЕ ТБЪМЙЮОЩЕ УРПУПВЩ ЗТХРРЙТПЧЛЙ: еУМЙ ЧЧЕДЕОБ ЛПНБОДОБС УФТПЛБ k1 && k2; k3 ЗДЕ k1, k2 Й k3 - ЛБЛЙЕ-ФП ЛПНБОДЩ, ФП "k2" ВХДЕФ ЧЩРПМОЕОБ ФПМШЛП РТЙ ХУРЕЫОПН ЪБЧЕТЫЕОЙЙ "k1"; РПУМЕ МАВПЗП ЙЪ ЙУИПДПЧ ПВТБВПФЛЙ "k2" (Ф.Е. "k2" ВХДЕФ ЧЩРПМОЕОБ, МЙВП РТПРХЭЕОБ) ВХДЕФ ЧЩРПМОЕОБ "k3". k1 && {k2; k3} ъДЕУШ ПВЕ ЛПНБОДЩ ("k2" Й "k3") ВХДХФ ЧЩРПМОЕОЩ ФПМШЛП РТЙ ХУРЕЫОПН ЪБЧЕТЫЕОЙЙ "k1". {k1; k2} & ч ЖПОПЧПН ТЕЦЙНЕ ВХДЕФ ЧЩРПМОСФШУС РПУМЕДПЧБФЕМШОПУФШ ЛПНБОД "k1" Й "k2". жПОПЧЩЕ РТПГЕУУЩ (ЛБЛ Й ФЕОЕЧХА ЬЛПОПНЙЛХ) УМПЦОП ХОЙЮФПЦЙФШ, РПУЛПМШЛХ ФТБДЙГЙПООБС ЛПНБОДБ "CTL/C" РТЕТЩЧБЕФ ФПМШЛП РТПГЕУУЩ РЕТЕДОЕЗП РМБОБ. дМС ХОЙЮФПЦЕОЙС ЖПОПЧПЗП РТПГЕУУБ ОБДП ЪОБФШ ЕЗП ОПНЕТ. рТЙ ЪБРХУЛЕ ЖПОПЧПЗП РТПГЕУУБ ОБ ЬЛТБО ЧЩДБЕФУС ЮЙУМП, УППФЧЕФУФЧХАЭЕЕ ОПНЕТХ (ЙДЕОФЙЖЙЛБФПТХ) ЬФПЗП РТПГЕУУБ (PID). еУМЙ ЬФПФ ОПНЕТ ЪБВЩФ ЙМЙ ОБДП ХВЕДЙФШУС, ЮФП ЬФПФ РТПГЕУУ ОЕ ЪБЛПОЮЕО, У РПНПЭША ЛПНБОДЩ ps -aux НПЦОП РПМХЮЙФШ РЕТЕЮЕОШ ЙДЕОФЙЖЙЛБФПТПЧ РТПГЕУУПЧ (PID), ЙНЕОБ РПМШЪПЧБФЕМЕК, ФЕЛХЭЕЕ ЧТЕНС, ЪБФТБЮЕООПЕ РТПГЕУУБНЙ, Й Ф.Д. ч ЧЩЧЕДЕООПК ФБВМЙГЕ НПЦОП ОБКФЙ ОПНЕТБ РТПГЕУУПЧ, РПДМЕЦБЭЙИ ХОЙЮФПЦЕОЙА, ОБРТЙНЕТ ЬФП "849" Й "866". фПЗДБ ЛПНБОДПК kill -9 866 849 НПЦОП ХОЙЮФПЦЙФШ ЬФЙ РТПГЕУУЩ. рТЙ ХОЙЮФПЦЕОЙЙ РТПГЕУУПЧ ОБДП ЧЩ ДПМЦОЩ ЙНЕФШ ФП ЦЕ ЙНС РПМШЪПЧБФЕМС, ЛБЛПЕ ВЩМП РТЙРЙУБОП ХОЙЮФПЦБЕНЩН РТПГЕУУБН (ЙМЙ ЙНЕФШ ЙНС РТЙЧЙМЕЗЙТПЧБООПЗП РПМШЪПЧБФЕМС). ртедхртецдеойе. еУМЙ РБТБММЕМШОП ПВТБВБФЩЧБЕФУС ЙМЙ УПЪДБЕФУС ЖБКМ У пдойн ЙНЕОЕН (ОБРТЙНЕТ, ОЕУЛПМШЛП РПМШЪПЧБФЕМЕК ЧЩЪЧБМЙ Ч ТЕДБЛФПТ ПДЙО Й ФПФ ЦЕ ЖБКМ), ФП Ч УЙУФЕНЕ РТПДПМЦЙФ УХЭЕУФЧПЧБОЙЕ ФПФ ЧБТЙБОФ ЖБКМБ, ЛПФПТЩК ЧПЪЧТБЭЕО (ЪБРЙУБО) Ч УЙУФЕНХ РПУМЕДОЙН. ьФП ЮБУФБС ПЫЙВЛБ РПМШЪПЧБФЕМЕК РЕТУПОБМШОЩИ ЛПНРШАФЕТПЧ, ЛПФПТЩЕ ТЕДБЛФЙТХАФ ПДЙО ЖБКМ РБТБММЕМШОП У ОЕУЛПМШЛЙИ ЬЛТБОПЧ. лТХЗМЩЕ УЛПВЛЙ "()", ЛТПНЕ ЧЩРПМОЕОЙС ЖХОЛГЙЙ ЗТХРРЙТПЧЛЙ, ЧЩРПМОСАФ Й ЖХОЛГЙА ЧЩЪПЧБ ОПЧПЗП ЬЛЪЕНРМСТБ ЙОФЕТРТЕФБФПТБ shell. рХУФШ НЩ ОБИПДЙМЙУШ Ч ОБЮБМШОПН ЛБФБМПЗЕ "/mnt/lab/asu" фПЗДБ Ч РПУМЕДПЧБФЕМШОПУФЙ ЛПНБОД cd ..; ls; ls ДЧЕ ЛПНБОДЩ "ls" ЧЩДБДХФ 2 ЬЛЪЕНРМСТБ УПДЕТЦЙНПЗП ЛБФБМПЗБ "/mnt/lab", Б РПУМЕДПЧБФЕМШОПУФШ (cd ..; ls) ls ЧЩДБУФ УОБЮБМБ УПДЕТЦЙНПЕ ЛБФБМПЗБ "/mnt/lab", Б ЪБФЕН УПДЕТЦЙНПЕ "/mnt/lab/asu", Ф.Л. РТЙ ЧИПДЕ Ч УЛПВЛЙ ЧЩЪЩЧБЕФУС ОПЧЩК ЬЛЪЕНРМСТ shell, Ч ТБНЛБИ ЛПФПТПЗП Й ПУХЭЕУФЧМСЕФУС РЕТЕИПД. рТЙ ЧЩИПДЕ ЙЪ ЛТХЗМЩИ УЛПВПЛ РТПЙУИПДЙФ ЧПЪЧТБФ Ч УФБТЩК shell Й Ч УФБТЩК ЛБФБМПЗ. 3.3. рЕТЕОБРТБЧМЕОЙЕ ЛПНБОД уФБОДБТФОЩК ЧЧПД (ЧИПД) - "stdin" Ч пу UNIX ПУХЭЕУФЧМСЕФУС У ЛМБЧЙБФХТЩ ФЕТНЙОБМБ, Б УФБОДБТФОЩК ЧЩЧПД (ЧЩИПД) - "stdout" ОБРТБЧМЕО ОБ ЬЛТБО ФЕТНЙОБМБ. уХЭЕУФЧХЕФ ЕЭЕ Й УФБОДБТФОЩК ЖБКМ ДЙБЗОПУФЙЮЕУЛЙИ УППВЭЕОЙК - "stderr", П ЛПФПТПН ТЕЮШ ВХДЕФ ЮХФШ РПЪЦЕ. лПНБОДБ, ЛПФПТБС НПЦЕФ ТБВПФБФШ УП УФБОДБТФОЩН ЧИПДПН Й ЧЩИПДПН, ОБЪЩЧБЕФУС жймшфтпн. рПМШЪПЧБФЕМШ ЙНЕЕФ ХДПВОЩЕ УТЕДУФЧБ РЕТЕОБРТБЧМЕОЙС ЧЧПДБ Й ЧЩЧПДБ ОБ ДТХЗЙЕ ЖБКМЩ (ХУФТПКУФЧБ). уЙНЧПМЩ ">" Й ">>" ПВПЪОБЮБАФ РЕТЕОБРТБЧМЕОЙЕ ЧЩЧПДБ. ls >f1 ЛПНБОДБ "ls" УЖПТНЙТХЕФ УРЙУПЛ ЖБКМПЧ ФЕЛХЭЕЗП ЛБФБМПЗБ Й РПНЕУФЙФ ЕЗП Ч ЖБКМ "f1" (ЧНЕУФП ЧЩДБЮЙ ОБ ЬЛТБО). еУМЙ ЖБКМ "f1" ДП ЬФПЗП УХЭЕУФЧПЧБМ, ФП ПО ВХДЕФ ЪБФЕТФ ОПЧЩН. pwd >>f1 ЛПНБОДБ pwd УЖПТНЙТХЕФ РПМОПЕ ЙНС ФЕЛХЭЕЗП ЛБФБМПЗБ Й РПНЕУФЙФ ЕЗП Ч ЛПОЕГ ЖБКМБ "f1", Ф.Е. ">>" ДПВБЧМСЕФ Ч ЖБКМ, ЕУМЙ ПО ОЕРХУФПК. уЙНЧПМЩ "f4 Й wc -l >f4 f2 дБООЩК ЛПОЧЕКЕТ ЙЪ ЖБКМБ "f1" ("cat") ЧЩВЕТЕФ ЧУЕ УФТПЛЙ, УПДЕТЦБЭЙЕ УМПЧП "result" ("grep"), ПФУПТФЙТХЕФ ("sort") РПМХЮЕООЩЕ УФТПЛЙ, Б ЪБФЕН РТПОХНЕТХЕФ ("cat -b") Й ЧЩЧЕДЕФ ТЕЪХМШФБФ Ч ЖБКМ "f2". рПУЛПМШЛХ ХУФТПКУФЧБ Ч пу UNIX РТЕДУФБЧМЕОЩ УРЕГЙБМШОЩНЙ ЖБКМБНЙ, ЙИ НПЦОП ЙУРПМШЪПЧБФШ РТЙ РЕТЕОБРТБЧМЕОЙСИ. уРЕГЙБМШОЩЕ ЖБКМЩ ОБИПДСФУС Ч ЛБФБМПЗЕ "/dev". оБРТЙНЕТ, "lp" - РЕЮБФШ; "console" - ЛПОУПМШ; "ttyi" - i-ЩК ФЕТНЙОБМ; "null" - ЖЙЛФЙЧОЩК (РХУФПК) ЖБКМ (ХУФТПКУФЧП). фПЗДБ, ОБРТЙНЕТ, ls > /dev/lp ЧЩЧЕДЕФ УПДЕТЦЙНПЕ ФЕЛХЭЕЗП ЛБФБМПЗБ ОБ РЕЮБФШ, Б f1 f-err УППВЭЕОЙС ПВ ПЫЙВЛБИ ВХДХФ ОБРТБЧМСФШУС (ПВ ЬФПН ЗПЧПТЙФ РЕТЕОБРТБЧМЕОЙЕ "2>") Ч ЖБКМ "f-err". лУФБФЙ, ЧЩ НПЦЕФЕ ЧУА ЙОЖПТНБГЙА ОБРТБЧМСФШ Ч ПДЙО ЖБКМ "ff", ЙУРПМШЪПЧБЧ Ч ДБООПН УМХЮБЕ ЛПОУФТХЛГЙА cat f1 f2 >>ff 2>ff нПЦОП ХЛБЪБФШ ОЕ ФПМШЛП ЛБЛПК ЙЪ УФБОДБТФОЩИ ЖБКМПЧ РЕТЕОБРТБЧМСФШ, ОП Й Ч ЛБЛПК УФБОДБТФОЩК ЖБКМ ПУХЭЕУФЧЙФШ РЕТЕОБРТБЧМЕОЙЕ. cat f1 f2 2>>ff 1>&2 ъДЕУШ УОБЮБМБ "stderr" РЕТЕОБРТБЧМСЕФУС (Ч ТЕЦЙНЕ ДПВБЧМЕОЙС) Ч ЖБКМ "ff", Б ЪБФЕН УФБОДБТФОЩК ЧЩИПД РЕТЕОБРТБЧМСЕФУС ОБ "stderr", ЛПФПТЩН Л ЬФПНХ НПНЕОФХ СЧМСЕФУС ЖБКМ "ff". фП ЕУФШ ТЕЪХМШФБФ ВХДЕФ БОБМПЗЙЮЕО РТЕДЩДХЭЕНХ. лПОУФТХЛГЙС "1>&2 - ПЪОБЮБЕФ, ЮФП ЛТПНЕ ОПНЕТБ УФБОДБТФОПЗП ЖБКМБ, Ч ЛПФПТЩК РЕТЕОБРТБЧЙФШ, ОЕПВИПДЙНП ЧРЕТЕДЙ УФБЧЙФШ "&; ЧУС ЛПОУФТХЛГЙС РЙЫЕФУС ВЕЪ РТПВЕМПЧ. &- - ЪБЛТЩЧБЕФ УФБОДБТФОЩК ЧЩЧПД. 3.4. зЕОЕТБГЙС ЙНЕО ЖБКМПЧ. рТЙ ЗЕОЕТБГЙЙ ЙНЕО ЙУРПМШЪХАФ НЕФБУЙНЧПМЩ: * - РТПЙЪЧПМШОБС (ЧПЪНПЦОП РХУФБС) РПУМЕДПЧБФЕМШОПУФШ УЙНЧПМПЧ; ? - ПДЙО РТПЙЪЧПМШОЩК УЙНЧПМ; [...] - МАВПК ЙЪ УЙНЧПМПЧ, ХЛБЪБООЩИ Ч УЛПВЛБИ РЕТЕЮЙУМЕОЙЕН Й/ЙМЙ У ХЛБЪБОЙЕН ДЙБРБЪПОБ; cat f* - ЧЩДБУФ ЧУЕ ЖБКМЩ ЛБФБМПЗБ, ОБЮЙОБАЭЙЕУС У "f"; cat *f* - ЧЩДБУФ ЧУЕ ЖБКМЩ, УПДЕТЦБЭЙЕ "f"; cat program.? - ЧЩДБУФ ЖБКМЩ ДБООПЗП ЛБФБМПЗБ У ПДОПВХЛЧЕООЩНЙ ТБУЫЙТЕОЙСНЙ, УЛБЦЕН "program.c" Й "program.o", ОП ОЕ ЧЩДБУФ "program.com"; cat [a-d]* - ЧЩДБУФ ЖБКМЩ, ЛПФПТЩЕ ОБЮЙОБАФУС У "a", "b", "c", "d". бОБМПЗЙЮОЩК ЬЖЖЕЛФ ДБДХФ Й ЛПНБОДЩ "cat [abcd]*" Й "cat [bdac]*". 3.5. лПНБОДОЩЕ ЖБКМЩ. дМС ФПЗП, ЮФПВЩ ФЕЛУФПЧЩК ЖБКМ НПЦОП ВЩМП ЙУРПМШЪПЧБФШ ЛБЛ ЛПНБОДХ, УХЭЕУФЧХЕФ ОЕУЛПМШЛП ЧПЪНПЦОПУФЕК. рХУФШ У РПНПЭША ТЕДБЛФПТБ УПЪДБО ЖБКМ У ЙНЕОЕН "cmd", УПДЕТЦБЭЙК ПДОХ УФТПЛХ УМЕДХАЭЕЗП ЧЙДБ: date; pwd; ls нПЦОП ЧЩЪЧБФШ shell ЛБЛ ЛПНБОДХ (!), ПВПЪОБЮБЕНХА "sh", Й РЕТЕДБФШ ЕК ЖБКМ "cmd", ЛБЛ БТЗХНЕОФ ЙМЙ ЛБЛ РЕТЕОБРТБЧМЕООЩК ЧИПД, Ф.Е. $ sh cmd ЙМЙ $ sh . чЧЕДЕООПЕ ЧБНЙ ЮЙУМП ЧПУРТЙОЙНБЕФУС ЙН ОЕ ЛБЛ ЮЙУМП, Б ЛБЛ РПУМЕДПЧБФЕМШОПУФШ УЙНЧПМПЧ(!). йОФЕТРТЕФПТ ОЕ РТПЧЕТСЕФ, ЮФП ЧЩ ЧЧЕМЙ. рПЬФПНХ Ч ЛБЮЕУФЧЕ ЪОБЮЕОЙС РЕТЕНЕООПК НПЦЕФ ПЛБЪБФШУС МАВБС ЧЧЕДЕООБС БВТБЛБДБВТБ ЙМЙ РТПУФП ОБЦБФЙЕ , ЛБЛ ЪОБЮЕОЙЕ РХУФПК УФТПЛЙ. (дМС ПВЕУРЕЮЕОЙС РТПЧЕТЛЙ ЖПТНБФБ ЧЧПДБ УМЕДХЕФ ОБРЙУБФШ УЧПА ЛПНБОДХ). рТЙ ПВТБЭЕОЙЙ Л shell-РЕТЕНЕООПК ОЕПВИПДЙНП РЕТЕД ЙНЕОЕН УФБЧЙФШ УЙНЧПМ "$". фБЛ ЛПНБОДЩ echo $var_2 echo var_2 ЧЩДБДХФ ОБ ЬЛТБО пу UNIX var_2 й ЕЭЕ ПДЙО РТЙНЕТ. жТБЗНЕОФ ЛПНБОДОПЗП ЖБКМБ: echo "var_2 = $var_2" ЧЩДБУФ ОБ ЬЛТБО var_2 = пу UNIX ч ЛПНБОДЕ "echo" РЕТЧПЕ ЙУРПМШЪПЧБОЙЕ "var_2" - ЬФП РТПУФП ФЕЛУФ, Б ЧФПТПЕ ("$var_2") - ЬФП ЪОБЮЕОЙЕ УППФЧЕФУФЧХАЭЕК РЕТЕНЕООПК. фП ЮФП ЪДЕУШ РТЙУХФУФЧХАФ РТПВЕМЩ НЕЦДХ ЙНЕОЕН РЕТЕНЕООПК Й УЙНЧПМПН РТЙУЧБЙЧБОЙС, Б ФБЛЦЕ НЕЦДХ УЙНЧПМПН РТЙУЧБЙЧБОЙС Й ЪОБЮЕОЙЕН, ФБЛ ЬФП РПФПНХ, ЮФП ЪДЕУШ НЩ ЙНЕЕН ДЕМП МЙЫШ У ФЕЛУФПН, ЛХДБ РПДУФБЧМЕОЩ ЪОБЮЕОЙС РЕТЕНЕООЩИ. фБН, ЗДЕ ДЕКУФЧЙФЕМШОП ЧЩРПМОСЕФУС РТЙУЧБЙЧБОЙЕ, РТПВЕМЩ Ч ЬФЙИ НЕУФБИ оедпрхуфйнщ. рТЙУЧБЙЧБОЙЕ, УЛБЦЕН, w= ПЪОБЮБЕФ РТЙУЧБЙЧБОЙЕ РЕТЕНЕООПК "w" РХУФПК УФТПЛЙ. оП Й РХУФХА УФТПЛХ МХЮЫЕ РТЙУЧБЙЧБФШ БЛЛХТБФОП, ОБРТЙНЕТ w="". дМС ФПЗП, ЮФПВЩ ЙНС РЕТЕНЕООПК ОЕ УМЙЧБМПУШ УП УФТПЛПК, УМЕДХАЭЕК ЪБ ЙНЕОЕН РЕТЕНЕООПК, ЙУРПМШЪХАФУС ЖЙЗХТОЩЕ УЛПВЛЙ. рХУФШ a=/mnt/lab/asu/ ФПЗДБ cat /mnt/lab/asu/prim Й cat ${a}prim ТБЧОПГЕООЩ (Ф.Е. "cat" ЧЩДБУФ ОБ ЬЛТБО УПДЕТЦЙНПЕ ПДОПЗП Й ФПЗП ЦЕ ЖБКМБ). еУМЙ ФБЛЦЕ РТЕДРПМПЦЙФШ, ЮФП Ч УЙУФЕНЕ ЕУФШ РЕТЕНЕООБС "prim" Й "prim=dir" , ФП ЛПНБОДБ echo ${a}$prim ЧЩДБУФ ОБ ЬЛТБО /mnt/lab/asu/dir 4.2. ьЛТБОЙТПЧБОЙЕ тБУУНПФТЙН ВПМЕЕ РПДТПВОП РТЙЕНЩ ЬЛТБОЙТПЧБОЙС, ЙУРПМШЪХЕНЩЕ Ч shell. ч ЛБЮЕУФЧЕ УТЕДУФЧ ЬЛТБОЙТПЧБОЙС ЙУРПМШЪХАФУС ДЧПКОЩЕ ЛБЧЩЮЛЙ (" "), ПДЙОБТОЩЕ ЛБЧЩЮЛЙ (' ') Й ВЬЛ-УМЬЫ (\). йЪ РТЙНЕТПЧ ПЮЕЧЙДОП ЙИ ДЕКУФЧЙЕ: нПЦОП Ч ПДОПК УФТПЛЕ ЪБРЙУЩЧБФШ ОЕУЛПМШЛП РТЙcЧБЙЧБОЙК. x=22 y=33 z=$x A="$x" B='$x' C=\$x D="$x + $y + $z" E='$x + $y + $z' F=$x\ +\ $y\ +\ $z (РТЙУЧБЙЧБОЙЕ G=$x + $y ОЕ ВЩМП ВЩ ЧЩРПМОЕОП ЙЪ-ЪБ РТПВЕМПЧ) фПЗДБ echo A = $A B = $B C = $C echo D = $D E = $E F = $F eval echo evaluated A = $A eval echo evaluated B = $B eval echo evaluated C = $C чЩДБДХФ ОБ ЬЛТБО A = 22 B = $x C = $x D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22 evaluated A = 22 evaluated B = 22 evaluated C = 22 чойнбойе. ч ФТЕИ РПУМЕДОЙИ УМХЮБСИ ЙУРПМШЪПЧБОБ УЧПЕПВТБЪОБС ЛПНБОДБ "eval" (ПФ evaluate - ПЪОБЮЙЧБФШ), ЛПФПТБС Ч РПДУФБЧМЕООПК Ч ОЕЕ (Ч ЛБЮЕУФЧЕ БТЗХНЕОФБ) ЛПНБОДЕ ЧЩРПМОСЕФ ПЪОБЮЙЧБОЙЕ РЕТЕНЕООЩИ (ЕУМЙ ФБЛПЧЩЕ ЙНЕАФУС). ч ТЕЪХМШФБФЕ ЪОБЮЕОЙЕ "A" ПУФБЕФУС РТЕЦОЙН, РПУЛПМШЛХ "A" ЙНЕЕФ ЪОБЮЕОЙЕ "22". б РЕТЕНЕООЩЕ "B" Й "C" ЙНЕАФ ЪОБЮЕОЙЕ "$x". ъБ УЮЕФ ПЪОБЮЙЧБОЙС, ЛПФПТПЕ ВЩМП ЧЩРПМОЕОП ЛПНБОДПК "eval" - evaluated "B" Й "C" ДБАФ ЪОБЮЕОЙС "22". еЭЕ ПДЙО РТЙНЕТ ОБ "eval". рХУФШ w=\$v v=\$u u=5 ч ТЕЪХМШФБФЕ ЧЩРПМОЕОЙС ЛПНБОД echo $w eval echo $w eval eval echo $w ОБ ЬЛТБО ВХДЕФ ЧЩЧЕДЕОП $v $u 5 рТЙЧЕДЕН ЕЭЕ РТЙНЕТЩ, УЧСЪБООЩЕ У ЬЛТБОЙТПЧБОЙЕН РЕТЕЧПДБ УФТПЛЙ. рХУФШ РЕТЕНЕООПК "string" РТЙУЧПЕОП ЪОБЮЕОЙЕ "НБУУЙЧБ" 2x3: abc def пВБФЙН ЧОЙНБОЙЕ, ЮФП ДМС ЙЪВЕЦБОЙС РТЙУЧБЙЧБОЙС МЙЫОЙИ РТПВЕМПЧ ЧФПТБС УФТПЛБ НБУУЙЧБ ОБЮБФБ У РЕТЧПК РПЪЙГЙЙ УМЕДХАЭЕК УФТПЛЙ: string="abc def" фПЗДБ ФТЙ ЧБТЙБОФБ ЪБРЙУЙ РЕТЕНЕООПК Ч ЛПНБОДЕ "echo" echo $string echo '$string' echo "$string" ДБДХФ УППФЧЕФУЧЕООП ФТЙ ТБЪМЙЮОЩИ ТЕЪХМШФБФБ: abc def $string abc def Б РПУМЕДПЧБФЕМШОПУФШ ЛПНБОД echo "УФТПЛБ РЕТЧБС УФТПЛБ ЧФПТБС" > f1 echo 'УФТПЛБ РЕТЧБС УФТПЛБ ЧФПТБС' > f2 cat f1 f2 ДБУФ ЧЩДБУФ РПУМЕДПЧБФЕМШОП ПДЙОБЛПЧЩЕ ЖБКМЩ f1 Й f2: УФТПЛБ РЕТЧБС УФТПЛБ ЧФПТБС УФТПЛБ РЕТЧБС УФТПЛБ ЧФПТБС ъБНЕФЙН ФБЛЦЕ, ЮФП ВЬЛ-УМЬЫ (\) ОЕ ФПМШЛП ЬЛТБОЙТХЕФ УМЕДХАЭЙК ЪБ ОЙН УЙНЧПМ, ЮФП РПЪЧПМСЕФ ЙУРПМШЪПЧБФШ УРЕГЙБМШОЩЕ УЙНЧПМЩ РТПУФП ЛБЛ УЙНЧПМЩ, РТЕДУФБЧМСАЭЙЕ УБНЙ УЕВС (ПО НПЦЕФ ЬЛТБОЙТПЧБФШ Й УБН УЕВС - \\), ОП Ч ЛПНБОДОПН ЖБКМЕ ВЬЛ-УМЬЫ РПЪЧПМСЕФ ПВ'ЕДЙОСФШ УФТПЛЙ Ч ПДОХ (ЬЛТБОЙТПЧБФШ ЛПОЕГ УФТПЛЙ). оБРТЙНЕТ, РТЙЧПДЙЧЫЙКУС ТБОЕЕ РТЙНЕТ ЛПНБОДОПК УФТПЛЙ: cat f1 | grep -h result | sort | cat -b > f2 НПЦЕФ ВЩФШ ЪБРЙУБО Ч ЛПНБОДОПН ЖБКМЕ, УЛБЦЕН, ЛБЛ cat f1 | grep -h \ result | sort | cat -b > f2 лУФБФЙ, ЬЖЖЕЛФ РТПДПМЦЕОЙС ЛПНБОДОПК УФТПЛЙ ПВЕУРЕЮЙЧБЕФ Й УЙНЧПМ ЛПОЧЕКЕТБ. ч ДБООПН УМХЮБЕ ЬФП НПЦЕФ ДБФШ ВПМЕЕ УЙНРБФЙЮОЩК ТЕЪХМШФБФ, ОБРТЙНЕТ: cat f1 | grep -h result | sort | cat -b > f2 4.3. нБОЙРХМСГЙЙ У shell-РЕТЕНЕООЩНЙ оЕУНПФТС ОБ ФП, ЮФП shell-РЕТЕНЕООЩЕ Ч ПВЭЕН УМХЮБЕ ЧПУРТЙОЙНБАФУС ЛБЛ УФТПЛЙ, Ф.Е "35" - ЬФП ОЕ ЮЙУМП, Б УФТПЛБ ЙЪ ДЧХИ УЙНЧПМПЧ "3" Й "5", Ч ТБДЕ УМХЮБЕЧ ПОЙ НПЗХФ ЙОФЕТРТЕФЙТПЧБФШУС ЙОБЮЕ, ОБРТЙНЕТ, ЛБЛ ГЕМЩЕ ЮЙУМБ. тБЪОППВТБЪОЩЕ ЧПЪНПЦОПУФЙ ЙНЕЕФ ЛПНБОДБ "expr". рТПЙММАУФТЙТХЕН ОЕЛПФПТЩЕ ОБ РТЙНЕТБИ: чЩРПМОЕОЙЕ ЛПНБОДОПЗП ЖБКМБ: x=7 y=2 a=`expr $x + $y` ; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y - $x` ; echo b=$b c=`expr $x '*' $y` ; echo c=$c d=`expr $x / $y` ; echo d=$d e=`expr $x % $y` ; echo e=$e ЧЩДБУФ ОБ ЬЛТБО a=9 a=10 b=-5 c=14 d=3 e=1 чойнбойе. пРЕТБГЙС ХНОПЦЕОЙС ("*") ПВСЪБФЕМШОП ДПМЦОБ ВЩФШ ЪБЬЛТБОЙТПЧБОБ, РПУЛПМШЛХ Ч shell ЬФПФ ЪОБЮЕЛ ЧПУРТЙОЙНБЕФУС, ЛБЛ УРЕГУЙНЧПМ, ПЪОБЮБАЭЙК, ЮФП ОБ ЬФП НЕУФП НПЦЕФ ВЩФШ РПДУФБЧМЕОБ МАВБС РПУМЕДПЧБФЕМШОПУФШ УЙНЧПМПЧ. уМЕДХЕФ ПВТБФЙФШ ФБЛЦЕ ЧОЙНБОЙЕ ОБ ПВСЪБФЕМШОЩЕ РТПВЕМЩ, ПФДЕМСАЭЙЕ РЕТЕНЕООЩЕ Й ЪОБЛЙ ПРЕТБГЙК. у ЛПНБОДПК "expr" ЧПЪНПЦОЩ ОЕ ФПМШЛП (ГЕМПЮЙУМЕООЩЕ) БТЙЖНЕФЙЮЕУЛЙЕ ПРЕТБГЙЙ, ОП Й УФТПЛПЧЩЕ: A=`expr 'cocktail' : 'cock'` ; echo $A B=`expr 'cocktail' : 'tail'` ; echo $B C=`expr 'cocktail' : 'cook'` ; echo $C D=`expr 'cock' : 'cocktail'` ; echo $D оБ ЬЛТБО ВХДХФ ЧЩЧЕДЕОЩ ЮЙУМБ, РПЛБЪЩЧБАЭЕЕ ЮЙУМП УПЧРБДБАЭЙИ УЙНЧПМПЧ Ч ГЕРПЮЛБИ (ПФ ОБЮБМБ). чФПТБС ЙЪ УФТПЛ ОЕ НПЦЕФ ВЩФШ ДМЙООЕЕ РЕТЧПК : 4 0 0 0 й ОБЛПОЕГ, ПВ ХУМПЧОПК ЪБНЕОЕ РЕТЕНЕООЩКИ. еУМЙ РЕТЕНЕООЩЕ, УЛБЦЕН "И", "y", "z", ОЕ ПРТЕДЕМЕОЩ, ФП РТЙ ПВТБЭЕОЙЙ Л РЕТЕНЕООЩН ${x-new} - Ч ЛБЮЕУФЧЕ ЪОБЮЕОЙС "x" ВХДЕФ ЧЩДБОП "new", ${y=new} - Ч ЛБЮЕУФЧЕ ЪОБЮЕОЙС "Х" ВХДЕФ РТЙУЧПЕОП "new", ${z?new} - Ч ЛБЮЕУФЧЕ ЪОБЮЕОЙС "z" ВХДЕФ ЧЩДБОП "z: new" Й УППФЧЕФУФЧХАЭБС РТПГЕДХТБ РТЕЛТБЭБЕФУС. чП ЧУЕИ ЬФЙИ УМХЮБСИ, ЕУМЙ РЕТЕНЕООБС ВЩМБ Л ЬФПНХ ЧТЕНЕОЙ ПРТЕДЕМЕОБ, ФП ЕЕ ЪОБЮЕОЙЕ ЙУРПМШЪХЕФУС ПВЩЮОЩН ПВТБЪПН. б Ч УМЕДХАЭЕН УМХЮБЕ ОБПВПТПФ, РХУФШ РЕТЕНЕООБС "v" ЙНЕЕФ ЛБЛПЕ-ФП ЪОБЮЕОЙЕ, ФПЗДБ ${z+new} - Ч ЛБЮЕУФЧЕ ЪОБЮЕОЙС "z" ВХДЕФ ЧЩДБОП "new", Б ЕУМЙ ОЕ ВЩМП РТЙУЧПЕОП ЪОБЮЕОЙЕ, ФП РХУФБС УФТПЛБ. 4.4. ьЛУРПТФ РЕТЕНЕООЩИ ч пу UNIX УХЭЕУФЧХЕФ РПОСФЙЕ РТПГЕУУБ. рТПГЕУУ ЧПЪОЙЛБЕФ ФПЗДБ, ЛПЗДБ ЪБРХУЛБЕФУС ОБ ЧЩРПМОЕОЙЕ ЛБЛБС-МЙВП ЛПНБОДБ (ТБУЮЕФ). оБРТЙНЕТ, РТЙ ОБВПТЕ ОБ ЛМБЧЙБФХТЕ "Т " РПТПЦДБЕФУС РТПГЕУУ ТБУЮЕФБ "Т". ч УЧПА ПЮЕТЕДШ "Т" НПЦЕФ РПТПДЙФШ ДТХЗЙЕ РТПГЕУУЩ. дПРХУФЙН, ЮФП "Т" ЧЩЪЩЧБЕФ ТБУЮЕФЩ "Т1" Й "Т2", ЛПФПТЩЕ РПУМЕДПЧБФЕМШОП РПТПЦДБАФ УППФЧЕФУЧХАЭЙЕ РТПГЕУУЩ. х ЛБЦДПЗП РТПГЕУУБ ЕУФШ УЧПС УТЕДБ - НОПЦЕУФЧП ДПУФХРОЩИ ЕНХ РЕТЕНЕООЩИ. оБРТЙНЕТ, ДП ЪБРХУЛБ ТБУЮЕФБ "Т" ХЦЕ УХЭЕУФЧПЧБМБ УТЕДБ, Ч ЛПФПТПК ХЦЕ ВЩМЙ ПРТЕДЕМЕОЩ ОЕЛПФПТЩЕ РЕТЕНЕООЩЕ (П УФБОДБТФОЩИ РЕТЕНЕООЩИ ТЕЮШ РПКДЕФ ОЕУЛПМШЛП РПЪЦЕ). ъБРХУЛ "Т" РПТПЦДБЕФ ОПЧХА УТЕДХ; ХЦЕ Ч ОЕК ВХДХФ РПТПЦДЕОЩ ТБУЮЕФЩ "Т1" Й "Т2". рЕТЕНЕООЩЕ МПЛБМШОЩ Ч ТБНЛБИ РТПГЕУУБ, Ч ЛПФПТПН ПОЙ ПВЯСЧМЕОЩ, Ф.Е. ЗДЕ ЙН РТЙУЧПЕОЩ ЪОБЮЕОЙС (ПРЙУБОЙЕ РЕТЕНЕООЩИ ПФУХФУЧХЕФ - ПОЙ ЧУЕ ПДОПЗП ФЙРБ). дМС ФПЗП, ЮФПВЩ ПОЙ ВЩМЙ ДПУФХРОЩ Й ДТХЗЙН РПТПЦДБЕНЩН РТПГЕУУБН, ОБДП РЕТЕДБФШ ЙИ СЧОЩН ПВТБЪПН. дМС ЬФПЗП ЙУРПМШЪХЕФУС ЧУФТПЕООБС ЛПНБОДБ "export". рТЙНЕТ. рХУФШ ТБУЮЕФ (ЛПНБОДОЩК ЖБКМ) "p", ЙНЕАЭЙК ЧЙД: # ТБУЮЕФ p echo тБУЮЕФ p varX=0 varY=1 echo varX=$varX varY=$varY export varY p1 # ЧЩЪПЧ ТБУЮЕФБ p1 p2 # ЧЩЪПЧ ТБУЮЕФБ p2 echo уОПЧБ ТБУЮЕФ p: varX=$varX varY=$varY ЧЩЪЩЧБЕФ ЛПНБОДОЩЕ ЖБКМЩ "p1" Й "p2", ЙНЕАЭЙЕ ЧЙД: # ТБУЮЕФ p1 echo тБУЮЕФ p1 echo varX=$varX varY=$varY varX=a varY=b echo varX=$varX varY=$varY export varX # ТБУЮЕФ p2 echo тБУЮЕФ p2 echo varX=$varX varY=$varY varX=A varY=B echo varX=$varX varY=$varY export varY оБ ЬЛТБО ВХДХФ ЧЩДБОЩ УМЕДХАЭБС ЙОЖПТНБГЙС: тБУЮЕФ p varX=0 varY=1 тБУЮЕФ p1 varX= varY=1 varX=a varY=b тБУЮЕФ p2 varX= varY=1 varX=A varY=B уОПЧБ ТБУЮЕФ p: varX=0 varY=1 йЪ РТЙНЕТБ ЧЙДОП, ЮФП ЪОБЮЕОЙС РЕТЕНЕООЩИ ЬЛУРПТФЙТХАФУС ФПМШЛП Ч ЧЩЪЩЧБЕНЩЕ ТБУЮЕФЩ (Й ОЕ РЕТЕДБАФУС "ЧЧЕТИ" Й "ЧВПЛ"). ьЛУРПТФЙТПЧБФШ РЕТЕНЕООЩЕ НПЦОП Й ЛПНБОДПК "set" У ЖМБЗПН "-a". об чуслйк умхюбк ЪБНЕФЙН, ЮФП ОБ РЕТЕДБЮХ ЪОБЮЕОЙК РЕТЕНЕООЩИ ОЙЛБЛПЗП ЧМЙСОЙС ОЕ ПЛБЪЩЧБЕФ "ЖЙЪЙЮЕУЛПЕ" ЧЪБЙНОПЕ ТБУРПМПЦЕОЙЕ (ЖБКМПЧ) ТБУЮЕФПЧ Ч ЖБКМПЧПК УЙУФЕНЕ. 4.5. рБТБНЕФТЩ ч ЛПНБОДОЩК ЖБКМ НПЗХФ ВЩФШ РЕТЕДБОЩ РБТБНЕФТЩ. ч shell ЙУРПМШЪХАФУС РПЪЙГЙПООЩЕ РБТБНЕФТЩ (Ф.Е. УХЭЕУФЧЕООБ ПЮЕТЕДОПУФШ ЙИ УМЕДПЧБОЙС). ч ЛПНБОДОПН ЖБКМЕ УППФЧЕФУФЧХАЭЙЕ РБТБНЕФТБН РЕТЕНЕООЩЕ (БОБМПЗЙЮОП shell-РЕТЕНЕООЩН) ОБЮЙОБАФУС У УЙНЧПМБ "$", Б ДБМЕЕ УМЕДХЕФ ПДОБ ЙЪ ГЙЖТ ПФ 0 ДП 9: рХУФШ ТБУЮЕФ "examp-1" ЧЩЪЩЧБЕФУС У РБТБНЕФТБНЙ "cock" Й "tail". ьФЙ РБТБНЕФТЩ РПРБДБАФ Ч ОПЧХА УТЕДХ РПД УФБОДБТФОЩНЙ ЙНЕОБНЙ "1" Й "2". ч (УФБОДБТФОПК) РЕТЕНЕООПК У ЙНЕОЕН "0" ВХДЕФ ИТБОЙФШУС ЙНС ЧЩЪЧБООПЗП ТБУЮЕФБ. рТЙ ПВТБЭЕОЙЙ Л РБТБНЕФТБН РЕТЕД ГЙЖТПК УФБЧЙФУС УЙНЧПМ ДПММБТБ "$" (ЛБЛ Й РТЙ ПВТБЭЕОЙЙ Л РЕТЕНЕООЩН): $0 - УППФЧЕФУФЧХЕФ ЙНЕОЙ ДБООПЗП ЛПНБОДОПЗП ЖБКМБ; $1 - РЕТЧЩК РП РПТСДЛХ РБТБНЕФТ; $2 - ЧФПТПК РБТБНЕФТ Й Ф.Д. рХУФШ ЛПНБОДОЩК ЖБКМ У ЙНЕОЕН "examp-1" ЙНЕЕФ ЧЙД echo ьФП ТБУЮЕФ $0: sort $2 >> $1 cat $1 Б ЖБКМЩ "cock" Й "tail" УПДЕТЦБФ УППФЧЕФУЧЕООП cock: ьФП ПФУПТФЙТПЧБООЩК ЖБКМ: tail: 1 3 2 фПЗДБ РПУМЕ ЧЩЪПЧБ ЛПНБОДЩ examp-1 cock tail ОБ ЬЛТБОЕ ВХДЕФ ьФП ТБУЮЕФ examp-1: ьФП ПФУПТФЙТПЧБООЩК ЖБКМ: 1 2 3 рПУЛПМШЛХ ЮЙУМП РЕТЕНЕООЩИ, Ч ЛПФПТЩЕ НПЗХФ РЕТЕДБЧБФШУС РБТБНЕФТЩ, ПЗТБОЙЮЕОП ПДОПК ГЙЖТПК, Ф.Е. 9-А ("0", ЛБЛ ХЦЕ ПФНЕЮБМПУШ ЙНЕЕФ ПУПВЩК УНЩУМ), ФП ДМС РЕТЕДБЮЙ ВПМШЫЕЗП ЮЙУМБ РБТБНЕФТПЧ ЙУРПМШЪХЕФУС УРЕГЙБМШОБС ЛПНБОДБ "shift". тБУУНПФТЙН ЕЕ ДЕКУФЧЙЕ ОБ РТЙНЕТЕ. рХУФШ ЛПНБОДОЩК ЖБКМ "many" ЧЩЪЩЧБЕФУС У 13-А РБТБНЕФТБНЙ many 10 20 30 40 50 60 70 80 90 100 110 120 130 й ЙНЕЕФ ЧЙД ### # many: рЕТЕДБЮБ ВПМШЫПЗП ЮЙУМБ РБТБНЕФТПЧ. echo "$0: нОПЗП РБТБНЕФТПЧ" echo " пВЭЕЕ ЮЙУМП РБТБНЕФТПЧ = $# йУИПДОПЕ УПУФПСОЙЕ: $1 $5 $9 " shift echo "1 УДЧЙЗ: РЕТЧЩК=$1 РСФЩК=$5 ДЕЧСФЩК=$9" shift 2 echo "1 + 2 = 3 УДЧЙЗБ: РЕТЧЩК=$1 РСФЩК=$5 ДЕЧСФЩК=$9" perem=`expr $1 + $2 + $3` echo $perem ч ТЕЪХМШФБФЕ РЕТЧПЗП РТЙНЕОЕОЙС ЛПНБОДЩ "shift" ЧФПТПК РБТБНЕФТ ТБУЮЕФБ ЧЩЪЩЧБЕФУС ЛБЛ $1, ФТЕФЙК РБТБНЕФТ ЧЩЪЩЧБЕФУС ЛБЛ $2, ... ДЕУСФЩК РБТБНЕФТ, ЛПФПТЩК ВЩМ ЙУИПДОП ОЕДПУФХРЕО, ЧЩЪЩЧБЕФУС ЛБЛ $9. оП УФБМ ОЕДПУФХРОЩН РЕТЧЩК РБТБНЕФТ! рПУМЕ ЧЩРПМОЕОЙС ЬФПЗП ТБУЮЕФБ ОБ ЬЛТБОЕ ВХДЕФ: many: нОПЗП РБТБНЕФТПЧ пВЭЕЕ ЮЙУМП РБТБНЕФТПЧ = 13 йУИПДОПЕ УПУФПСОЙЕ: 10 50 90 1 УДЧЙЗ: РЕТЧЩК=20 РСФЩК=60 ДЕЧСФЩК=100 1 + 2 = 3 УДЧЙЗ: РЕТЧЩК=40 РСФЩК=80 ДЕЧСФЩК=120 150 уЧПЕПВТБЪОЩК РПДИПД Л РБТБНЕФТБН ДБЕФ ЛПНБОДБ "set". оБРТЙНЕТ, ЖТБЗНЕОФ ТБУЮЕФБ set a b У echo РЕТЧЩК=$1 ЧФПТПК=$2 ФТЕФЙК=$3 ЧЩДБУФ ОБ ЬЛТБО РЕТЧЩК=a ЧФПТПК=b ФТЕФЙК=c Ф.Е. ЛПНБОДБ "set" ХУФБОБЧМЙЧБЕФ ЪОБЮЕОЙС РБТБНЕФТПЧ. ьФП ВЩЧБЕФ ПЮЕОШ ХДПВОП. оБРТЙНЕТ, ЛПНБОДБ "date" ЧЩДБЕФ ОБ ЬЛТБО ФЕЛХЭХА ДБФХ, УЛБЦЕН, "Mon May 01 12:15:10 2000", УПУПФСЭХА ЙЪ РСФЙ УМПЧ, ФПЗДБ set `date` echo $1 $3 $5 ЧЩДБУФ ОБ ЬЛТБО Mon 01 2000 лПНБОДБ "set" РПЪЧПМСЕФ ФБЛЦЕ ПУХЭЕУФЧМСФШ ЛПОФТПМШ ЧЩРПМОЕОЙС РТПЗТБННЩ, ОБРТЙНЕТ: set -v - ОБ ФЕТНЙОБМ ЧЩЧПДСФУС УФТПЛЙ, ЮЙФБЕНЩЕ shell. set +v - ПФНЕОСЕФ РТЕДЩДХЭЙК ТЕЦЙН. set -x - ОБ ФЕТНЙОБМ ЧЩЧПДСФУС ЛПНБОДЩ РЕТЕД ЧЩРПМОЕОЙЕН. set +x - ПФНЕОСЕФ РТЕДЩДХЭЙК ТЕЦЙН. лПНБОДБ "set" ВЕЪ РБТБНЕФТПЧ ЧЩЧПДЙФ ОБ ФЕТНЙОБМ УПУФПСОЙЕ РТПЗТБННОПК УТЕДЩ (УН ДБМЕЕ). 4.6. рПДУФБОПЧЛЙ shell-ЙОФЕТРТЕФБФПТБ рЕТЕД ОБЮБМПН ОЕРПУТЕДУФЧЕООПК ЙОФЕТРТЕФБГЙЙ Й ЧЩРПМОЕОЙЕН ЛПНБОД, УПДЕТЦБЭЙИУС Ч ЛПНБОДОЩИ ЖБКМБИ, shell ЧЩРПМОСЕФ ТБЪМЙЮОЩЕ ЧЙДЩ РПДУФБОПЧПЛ: 1. рпдуфбопчлб теъхмшфбфпч. чЩРПМОСАФУС ЧУЕ ЛПНБОДЩ, ЪБЛМАЮЕООЩЕ Ч ПВТБФОЩЕ ЛБЧЩЮЛЙ, Й ОБ ЙИ НЕУФП РПДУФБЧМСЕФУС ТЕЪХМШФБФ. 2. рпдуфбопчлб ъобюеойк рбтбнефтпч й ретенеоощи. фП ЕУФШ УМПЧБ, ОБЮЙОБАЭЙЕУС ОБ "$", ЪБНЕОСАФУС УППФЧЕФУЧХАЭЙНЙ ЪОБЮЕОЙСНЙ РЕТЕНЕООЩИ Й РБТБНЕФТПЧ. 3. йофетртефбгйс ртпвемпч. ъБЬЛТБОЙТПЧБООЩЕ РТПВЕМЩ ЙЗОПТЙТХАФУС. 4. зеоетбгйс йнео жбкмпч. рТПЧЕТСАФУС УМПЧБ ОБ ОБМЙЮЙЕ Ч ОЙИ УРЕГУЙНЧПМПЧ ("*", "?","[]") Й ЧЩРПМОСАФУС УППФЧЕФУЧХАЭЙЕ ЗЕОЕТБГЙЙ. 4.7. рТПЗТБННОБС УТЕДБ лБЦДЩК РТПГЕУУ ЙНЕЕФ УТЕДХ, Ч ЛПФПТПК ПО ЧЩРПМОСЕФУС. shell ЙУРПМШЪХЕФ ТСД РЕТЕНЕООЩИ ЬФПК УТЕДЩ. еУМЙ ЧЩ ОБВЕТЕФЕ ЛПНБОДХ "set" ВЕЪ РБТБНЕФТПЧ, ФП ОБ ЬЛТБО ВХДЕФ ЧЩДБОБ ЙОЖПТНБГЙС П ТСДЕ УФБОДБТФОЩИ РЕТЕНЕООЩИ, УПЪДБООЩИ РТЙ ЧИПДЕ Ч УЙУФЕНХ (Й РЕТЕДБЧБЕНЩИ ДБМЕЕ ЧУЕН ЧБЫЙН ОПЧЩН РТПГЕУУБН "РП ОБУМЕДУФЧХ"), Б ФБЛЦЕ РЕТЕНЕООЩИ, УПЪДБООЩИ Й ЬЛУРПТФЙТХЕНЩИ ЧБЫЙНЙ РТПГЕУУБНЙ. лПОЛТЕФОЩК ЧЙД Й УПДЕТЦБОЙЕ ЧЩДБЧБЕНПК ЙОЖПТНБГЙЙ Ч ОЕНБМПК УФЕРЕОЙ ЪБЧЙУЙФ ПФ ФПЗП, ЛБЛБС ЧЕТУЙС UNIX ЙУРПМШЪХЕФУС Й ЛБЛ ЙОУФБММЙТПЧБОБ УЙУФЕНБ. чПФ МЙЫШ ЮБУФШ ФПЗП, ЮФП ЧЩДБМБ НОЕ ЛПНБОДБ "set": HOME=/home/sae PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/home/sae/STUDY/SHELL PS1=${PWD}:" " PS2=> SHELL=/bin/bash TERM=linux TERMCAP=console|con80x25|dumb|linux:li#25:co#80:: UID=501 perem=stroka x=5 рТПЛПННЕОФЙТХЕН ЬФЙ РТЙУЧБЙЧБОЙС ЪОБЮЕОЙК РЕТЕНЕООЩН. HOME=/home/sae - ЬФП ЙНС ДПНБЫОЕЗП ДЙТЕЛФПТЙС, Ч ЛПФПТПН РПМШЪПЧБФЕМШ (Ч ДБООПН УМХЮБЕ С) ПЛБЪЩЧБЕФУС РПУМЕ ЧИПДБ Ч УЙУФЕНХ. фП ЕУФШ, РТБЧЙМШОП ОБВТБЧ ЙНС Й РБТПМШ, С ПЛБЦХУШ Ч ДЙТЕЛФПТЙЙ "/home/sae". PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - ЬФБ РЕТЕНЕООБС ЪБДБЕФ РПУМЕДПЧБФШЕМШОПУФШ ЖБКМПЧ (фтпрх), ЛПФПТЩЕ РТПУНБФТЙЧБЕФ "shell" Ч РПЙУЛБИ ЛПНБОДЩ. йНЕОБ ЖБКМПЧ ТБЪДЕМСАФУС ЪДЕУШ ДЧПЕФПЮЙСНЙ. рПУМЕДПЧБФЕМШОПУФШ РТПУНПФТБ УППФЧЕФУФЧХЕФ ПЮЕТЕДОПУФЙ УМЕДПЧБОЙС ЙНЕО Ч ФТПРЕ. оп ретчпобюбмшоп РПЙУЛ РТПЙУИПДЙФ УТЕДЙ ФБЛ ОБЪЩЧБЕНЩИ ЧУФТПЕООЩИ ЛПНБОД. ч ЮЙУМП ЧУФТПЕООЩИ ЛПНБОД ЧИПДСФ ОБЙВПМЕЕ ЮБУФП ЙУРПМШЪХЕНЩЕ ЛПНБОДЩ, ОБРТЙНЕТ "echo", "cd", "pwd", "date". рПУМЕ ЬФПЗП УЙУФЕНБ РТПУНБФТЙЧБЕФ ДЙТЕЛФПТЙК "/bin", Ч ЛПФТПН НПЗХФ ОБИПДЙФШУС ЛПНБОДЩ "sh", "cp", "mv", "ls" Й Ф.Р. ъБФЕН ДЙТЕЛФПТЙК "/usr/bin" У ЛПНБОДБНЙ "cat", "УУ", "expr", "nroff", "man" Й НОПЗЙНЙ ДТХЗЙНЙ. дБМЕЕ РПЙУЛ РТПЙУИПДЙФ Ч ФЕЛХЭЕН ДЙТЕЛФПТЙЙ (".", ЙМЙ ДТХЗПЕ ПВПЪОБЮЕОЙЕ - "РХУФП", Ф.Е.""), ЗДЕ УЛПТЕЕ ЧУЕЗП ОБИПДСФУС ОБРЙУБООЩЕ ЧБНЙ ЛПНБОДЩ (ТБУЮЕФЩ). рПУМЕ ОБВПТБ ЛПНБОДОПК УФТПЛЙ Й ОБЦБФЙС "shell" (РПУМЕ ЧЩРПМОЕОЙС ОЕПВИПДЙНЩИ РПДУФБОПЧПЛ) ТБУРПЪОБЕФ ЙНС, УППФЧЕФУФХАЭЕЕ ЛПНБОДЕ Й ПУХЭЕУФЧМСЕЕФ ЕЕ РПЙУЛ Ч ДЙТЕЛФПТЙСИ, РЕТЕЮЙУМЕООЩИ Ч ФТПРЕ. еУМЙ ЛПНБОДБ ТБЪНЕЭЕОБ ЧОЕ ЬФЙИ ДЙТЕЛФПТЙЕЧ - ПОБ ОЕ ВХДЕФ ОБКДЕОБ. еУМЙ РТЙУХФУФЧХЕФ ОЕУЛПМШЛП ЛПНБОД У ПДЙОБЛПЧЩН ЙНЕОЕН, ФП ЧЩЪЧБОБ ВХДЕФ ФБ, ЛПФПТБС ТБУРПМПЦЕОБ Ч ДЙТЕЛФПТЙЙ, РТПУНБФТЙЧБЕНПН РЕТЧЩН. фТПРХ, ЛБЛ Й РТПЮЙЕ РЕТЕНООЩЕ, НПЦОП МЕЗЛП НЕОСФШ, ДПВБЧМСС, РЕТЕУФБЧМСС ЙМЙ ЙУЛМАЮБС ДЙТЕЛФПТЙЙ. (лУФБФЙ, РТЕДУФБЧМЕООБС ФТПРБ РПМХЮЕОБ ЙЪ "ОБУФПСЭЕК" РХФЕН УПЛТБЭЕОЙК Й РЕТЕУФБОПЧПЛ). IFS= - (чОХФТЕООЙК тБЪДЕМЙФЕМШ рПМЕК) РЕТЕЮЙУМСЕФ УЙНЧПМЩ, ЛПФПТЩЕ УМХЦБФ ДМС ТБЪДЕМЕОЙС УМПЧ (РПМЕК). фБЛПЧЩНЙ СЧМСАФУС "РТПВЕМ", "ФБВХМСГЙС" Й "РЕТЕЧПД УФТПЛЙ", РПЬФПНХ ЪДЕУШ УМЕЧБ ПФ РТЙУЧБЙЧБОЙС ОЙЮЕЗП ОЕ ЧЙДОП Й ЪБОСФП ДЧЕ УФТПЛЙ. LOGNAME=sae - ЙНС ЧИПДБ ("ЙНС" РПМШЪПЧБФЕМС). MAIL=/var/spool/mail/sae - ЙНС ЖБКМБ, Ч ЛПФПТЩК РПУФХРБЕФ (ЬМЕЛФТПООБС) РПЮФБ. PWD=/home/sae/STUDY/SHELL - ЙНС ФЕЛХЭЕЗП ДЙТЕЛФПТЙС PS1=${PWD}:" " - ЧЙД РТПНФЕТБ. ч ДБООПН УМХЮБЕ Ч РТПНРФЕТЕ ВХДЕФ ЧЩДБЧБФШУС ЙНС ФЕЛХЭЕЗП ДЙТЕЛФПТЙС ДЧПЕФПЮЙЕ Й РТПВЕМ. фП ЕУФШ ЪДЕУШ ВХДЕФ "/home/sae/STUDY/SHELL: ". PS2=> - ЬФПФ РТПНФЕТ (ЬДЕУШ ">") ЙУРПМШЪХЕФУС ЛБЛ РТЙЗМБЫЕОЙЕ Л РТПДПМЦЕОЙА ЧЧПДБ (Ч ПЮЕТЕДОПК УФТПЛЕ) ОЕЪБЛПОЮЕООПК ЛПНБОДЩ. оБРТЙНЕТ, ОБВЕТЙФЕ ПФЛТЩЧБАЭХА УЛПВЛХ "(" Й РПУМЕ ОБЦБФЙС Ч УМЕДХАЭЕК УФТПЛЕ ЧЩ ХЧЙДЙФЕ ЬФПФ РТПНРФЕТ. еУМЙ РПЛБ ОЕ ЪОБЕФЕ, ЮФП ДБМШЫЕ ДЕМБФШ, ОБВЕТЙФЕ ЪБЛТЩЧБАЭХА УЛПВЛХ ")" - Й ПО ЙУЮЕЪОЕФ. SHELL=/bin/bash - ЬФБ РЕТЕНЕООБС ХЛБЪЩЧБЕФ ПВПМПЮЛХ, ЛПФПТХА ЙУРПМШЪХЕФ РПМШЪПЧБФЕМШ. ч ДБООПН УМХЮБЕ ЙУРПМШЪХЕФУС ОЕ (УФБОДБТФОЩК) shell ("sh"), Б "РТПДЧЙОХФБС" ЧЕТУЙС - "bash", ОБРЙУБООБС ФЕН ЦЕ БЧФПТПН (Bourne-Again SHell). TERM=linux - ХЛБЪБОЙЕ ФЙРБ ФЕТНЙОБМБ. TERMCAP=console|con80x25|dumb|linux:li#25:co#80:: - (TERMinal CAPacity) ЬФП (ПЮЕОШ УЙМШОП) ПВТЕЪБООБС УФТПЛБ ЪБДБОЙС РБТБНЕФТПЧ ФЕТНЙОБМБ. UID=501 - ЙДЕОФЙЖЙЛБФПТ РПМШЪПЧБФЕМС (НПК - "501"). perem=stroka x=5 - РЕТЕНЕООЩЕ, ЛПФПТЩЕ ЧЧЕМ РПМШЪПЧБФЕМШ. йУИПДОБС УТЕДБ ХУФБОБЧМЙЧБЕФУС БЧФПНБФЙЮЕУЛЙ РТЙ ЧИПДЕ Ч УЙУФЕНХ У ЙУРПМШЪПЧБОЙЕН ЖБКМПЧ ФЙРБ "/etc/rc" Й "/etc/.profile". чбцопе ъбнеюбойе. пДЙО ЙЪ УРПУПВПЧ РТПУФП ЙЪНЕОЙФ УТЕДХ (ОБРТЙНЕТ, ФТПРХ РПЙУЛБ ЛПНБОД, ЧЙД РТПНФЕТБ, ЧЙД ПВПМПЮЛЙ, ГЧЕФ ЬЛТБОБ Й Ф.Р.) НПЦОП, ТБЪНЕУФЙЧ ЬФХ ЙОЖПТНБГЙА Ч УЧПЕН ДПНБЫОЕН ДЙТЕЛФПТЙЙ Ч УРЕГЙБМШЙЪЙТПЧБООПН ЖБКМЕ ".profile" (${HOME}/.profile), РТЙУЧПЙЧ ОХЦОЩЕ ЪОБЮЕОЙС РЕТЕНЕООЩН УТЕДЩ. фП ЕУФШ ЧЩЪЧБФШ ЬФП ЖБКМ Ч ТЕДБЛФПТ Й ОБРЙУБФШ, ЮФП РПЦЕМБЕФЕ). фПЗДБ РТЙ ЛБЦДПН ЧБЫЕН ЧИПДЕ Ч УЙУФЕНХ ЬФПФ ЖБКМ ВХДЕФ БЧФПНБФЙЮЕУЛЙ ЧЩРПМОСФШУС Й ХУФБОБЧМЙЧБФШ ОПЧХА УТЕДХ. ьФПФ ЖБКМ ДПМЦЕО пвсъбфемшоп ТБЪНЕЭБФШУС Ч ЧБЫЕН дпнбыоен ДЙТЕЛФПТЙЙ (ДЙТЕЛФПТЙЙ ЧИПДБ). еУМЙ ЧЩ ЧОЕУМЙ ЙЪНЕОЕОЙС Ч ".profile", ФП ДМС РЕТЕОПУБ ЬФЙИ ЙЪНЕОЕОЙК Ч УТЕДХ ОЕПВИПДЙНП ЧЩРПМОЙФШ ЬФПФ ЖБКМ. дМС ЬФПЗП НПЦОП ЧЩКФЙ Й ЪБОПЧП ЧПКФЙ Ч УЙУФЕНХ, Б НПЦОП ЧПУРПМШЪПЧБФШУС (УРЕГЙБМШОП ДМС ЬФПЗП УМХЮБС УПЪДБООПК) ЛПНБОДПК "." ВЕЪ ЧЩИПДБ ЙЪ УЙУФЕНЩ, Ф.Е. . .profile уМЕДХЕФ ЙНЕФШ Ч ЧЙДХ, ЮФП ЙНЕОБ ЖБКМПЧ, ОБЮЙОБАЭЙЕУС У ФПЮЛЙ, ЧППВЭЕ ЙНЕАФ ПУПВЩК УФБФХУ. фБЛ, ПОЙ ОЕ ЧЩДБАФУС ОБ ЬЛТБО РТПУФПК ЛПНБОДПК "ls" - ОЕПВИПДЙНП ЧЩЪЩЧБФШ ЬФХ ЛПНБОДХ У ЖМБЗПН "-a". лУФБФЙ, Й ОЕ ХОЙЮФПЦБАФУС ПЗХМШОП ЛПНБОДПК "rm *". дПРЙУБФШ ОПЧЩК УПЧК ДЙТЕЛФПТЙК "my" Ч ФТПРХ ЛПНБОД НПЦОП, ЪБРЙУБЧ Ч ".profile", ОБРТЙНЕТ PATH=${PATH}:/home/sae/my ЙМЙ PATH=${PATH}:${HOME}/my лБЛ РТБЧЙМП, ХУФБОБЧМЙЧБЕНЩЕ РЕТЕНЕООЩЕ УТЕДЩ УМЕДХЕФ ЬЛУРПТФЙТПЧБФШ. оБРТЙНЕТ, export TERM PATH REDKEYS MAIL лТПНЕ ПРТЕДЕМЕОЙС РЕТЕНЕООЩИ Ч ".profile" НПЦОП ЧЩРПМОЙФШ ЛПНБОДЩ, ОБРТЙНЕТ ЛПНБОДБ stty -lcase ХУФБОПЧЙФ ФЕТНЙОБМ Ч ТЕЦЙН "ВПМШЫЙЕ Й НБМЕОШЛЙЕ ВХЛЧЩ"; Б ЛПНБОДБ cat ЪБУФБЧЛБ ЧЩДБУФ ОБ ЬЛТБО ЪБУФБЧЛХ , ЛПФПТХА ЧЩ УБНЙ РПДЗПФПЧЙФЕ Ч ЖБКМЕ "ЪБУФБЧЛБ" У ХЮЕФПН ЧБЫЙИ ЬУФЕФЙЮЕУЛЙИ РТЙУФТБУФЙК Й ИХДПЦЕУФЧЕООЩИ УРПУПВОПУФЕК. уБН ЙОФЕТРТЕФБФПТ shell БЧФПНБФЙЮЕУЛЙ РТЙУЧБЙЧБЕФ ЪОБЮЕОЙС УМЕДХАЭЙН РЕТЕНЕООЩН (РБТБНЕФТБН): ? - ЪОБЮЕОЙЕ, ЧПЪЧТБЭЕООПЕ РПУМЕДОЕК ЛПНБОДПК; $ - ОПНЕТ РТПГЕУУБ; ! - ОПНЕТ ЖПОПЧПЗП РТПГЕУУБ; # - ЮЙУМП РПЪЙГЙПООЩИ РБТБНЕФТПЧ, РЕТЕДБЧБЕНЩИ Ч shell; * - РЕТЕЮЕОШ РБТБНЕФТПЧ, ЛБЛ ПДОБ УФТПЛБ; @ - РЕТЕЮЕОШ РБТБНЕФТПЧ, ЛБЛ УПЧПЛХРОПУФШ УМПЧ; - - ЖМБЗЙ, РЕТЕДБЧБЕНЩЕ Ч shell. рТЙ ПВТБЭЕОЙЙ Л ЬФЙН РЕТЕНЕООЩН (Ф.Е РТЙ ЙУРПМШЪПЧБОЙЙ ЙИ Ч ЛПНБОДОПН ЖБКМЕ - shell-РТПЗТБННЕ) УМЕДХЕФ ЧРЕТЕДЙ УФБЧЙФШ "$". рТЙНЕТ. чЩЪПЧ ТБУЮЕФБ specific par1 par2 par3 ЙНЕАЭЕЗП ЧЙД ### # specific: уРЕГЙБМШОЩЕ РБТБНЕФТЩ (РЕТЕНЕООЩЕ) echo $0 - ЙНС ТБУЮЕФБ echo $? - ЛПД ЪБЧЕТЫЕОЙС echo $$ - ЙДЕОФЙЖЙЛБФПТ РПУМЕДОЕЗП РТПГЕУУБ echo $! - ЙДЕОФЙЖЙЛБФПТ РПУМЕДОЕЗП ЖПОПЧПЗП РТПГЕУУБ echo echo $* - ЪОБЮЕОЙС РБТБНЕФТПЧ, ЛБЛ УФТПЛЙ echo $@ - ЪОБЮЕОЙС РБТБНЕФТПЧ, ЛБЛ УМПЧ echo set -au echo $- - ТЕЦЙНЩ ТБВПФЩ ЙОФЕТРТЕФБФПТБ чЩДБУФ ОБ ЬЛТБО specific - ЙНС ТБУЮЕФБ 0 - ЛПД ЪБЧЕТЫЕОЙС 499 - ЙДЕОФЙЖЙЛБФПТ РПУМЕДОЕЗП РТПГЕУУБ 98 - ЙДЕОФЙЖЙЛБФПТ РПУМЕДОЕЗП ЖПОПЧПЗП РТПГЕУУБ par1 par2 par3 - ЪОБЮЕОЙС РБТБНЕФТПЧ, ЛБЛ УФТПЛЙ par1 par2 par3 - ЪОБЮЕОЙС РБТБНЕФТПЧ, ЛБЛ УМПЧ au - ТЕЦЙНЩ ТБВПФЩ ЙОФЕТРТЕФБФПТБ лПД "0" УППФЧЕФУЧХЕФ ОПТНБМШОПНХ ЪБЧЕТЫЕОЙА РТПГЕУУБ. чБЦОХА ТПМШ РТЙ УПЪДБОЙЙ ХОЙЛБМШОЩИ ЖБКМПЧ ЙЗТБЕФ УРЕГЙБМШОБС РЕТЕНЕООБС "$$", ЪОБЮЕОЙЕ ЛПФПТПК УППФЧЕФУФЧХЕФ ОПНЕТХ РТПГЕУУБ, ЧЩРПМОСАЭЕЗП ДБООЩК ТБУЮЕФ. лБЦДЩК ОПЧЩК ТБУЮЕФ, ЧЩРПМОСЕНЩК ЛПНРШАФЕТПН, ЙОЙГЙЙТХЕФ ПДЙО ЙМЙ ОЕУЛПМШЛП РТПГЕУУПЧ, БЧФПНБФЙЮЕУЛЙ РПМХЮБАЭЙИ ОПНЕТБ РП-РПТСДЛХ. рПЬФПНХ, ЙУРПМШЪХС ОПНЕТ РТПГЕУУБ Ч ЛБЮЕУФЧЕ ЙНЕОЙ ЖБКМБ, НПЦОП ВЩФШ ХЧЕТЕООЩН, ЮФП ЛБЦДЩК ОПЧЩК ЖБКМ ВХДЕФ ЙНЕФШ ОПЧПЕ ЙНС (ОЕ ЪБРЙЫЕФУС ОБ НЕУФП ХЦЕ УХЭЕУФЧХАЭЕЗП). дПУФПЙОУФЧП СЧМСЕФУС Й ЗМБЧОЩН ОЕДПУФБФЛПН ФБЛПЗП УРПУПВБ ЙНЕОПЧБОЙС ЖБКМПЧ. оЕЙЪЧЕУФОП, ЛБЛЙЕ ЙНЕОБ ВХДХФ РТЙУЧПЕОЩ ЖБКМБН. й, ЕУМЙ Ч ТБНЛБИ ДБООПЗП РТПГЕУУБ НПЦОП ОБКФЙ ЖБКМ "ОЕ ЗМСДС", Ф.Е., ПВТБФЙЧЫЙУШ Л ОЕНХ, ЙУРПМШЪХС $$, ФП РПФПН ФБЛЙЕ ЖБКМЩ НПЦОП МЕЗЛП РПФЕТСФШ. ьФП УПЪДБЕФ ДПРПМОЙФЕМШОЩЕ РТПВМЕНЩ РТЙ ПФМБДЛЕ РТПЗТБНН. "echo" ВЕЪ РБТБНЕФТПЧ ЧЩЧПДЙФ РХУФХА УФТПЛХ. тБЪМЙЮЙС $* Й $@ УПУФПЙФ Ч ФПН, ЮФП РЕЧБС РЕТЕНЕООБС НПЦЕФ ВЩФШ РТЕДУФБЧМЕОБ ЛБЛ "par1 par2 par3" Б ЧФПТБС ЛБЛ "par1" "par2" "par3" рТЙНЕТ, ЙММАУФТЙТХАЭЙК ТБЪМЙЮЙС "$*" Й "$@" ВХДЕФ ТБУУНПФТЕО Ч УЧСЪЙ У ПРЕТБФПТПН "for". дМС ЙММАУФТБГЙЙ НЩ ХУФБОПЧЙМЙ ЛПНБОДПК "set" ТЕЦЙНЩ ЙОФЕТРТЕФБФПТБ ("a" - ЧУЕ РПУМЕДХАЭЙЕ РЕТЕНЕООЩЕ ЬЛУРПТФЙТХАФУС; "u" - ПФУХФУФЧЙЕ РБТБНЕФТБ УЮЙФБФШ ПЫЙВЛПК), ЮФП Й ПФТБЪЙМПУШ Ч УРЕГЙБМШОПК РЕТЕНЕООПК "$-". 5. ртпзтбнноще уфтхлфхтщ лБЛ ЧП ЧУСЛПН СЪЩЛЕ РТПЗТБННЙТПЧБОЙС Ч ФЕЛУФЕ ОБ СЪЩЛЕ shell НПЗХФ ВЩФШ ЛПННЕОФБТЙЙ. дМС ЬФПЗП ЙУРПМШЪХЕФУС УЙНЧПМ "#". чУЕ, ЮФП ОБИПДЙФУС Ч УФТПЛЕ (Ч ЛПНБОДОПН ЖБКМЕ) МЕЧЕЕ ЬФПЗП УЙНЧПМБ, ЧПУРТЙОЙНБЕФУС ЙОФЕТРТЕФБФПТПН ЛБЛ ЛПННЕОФБТЙК. оБРТЙНЕТ, # ьФП ЛПННЕОФБТЙК. ## й ЬФП. ### й ЬФП ФПЦЕ. лБЛ ЧП ЧУСЛПН РТПГЕДХТОПН СЪЩЛЕ РТПЗТБННЙТПЧБОЙС Ч СЪЩЛЕ shell ЕУФШ ПРЕТБФПТЩ. тСД ПРЕТБФПТПЧ РПЪЧПМСЕФ ХРТБЧМСФШ РПУМЕДПЧБФЕМШОПУФША ЧЩРПМОЕОЙС ЛПНБОД. ч ФБЛЙИ ПРЕТБФПТБИ ЮБУФП ОЕПВИПДЙНБ РТПЧЕТЛБ ХУМПЧЙС, ЛПФПТБС Й ПРТЕДЕМСЕФ ОБРТБЧМЕОЙЕ РТПДПМЦЕОЙС ЧЩЮЙУМЕОЙК. 5.1. лПНБОДБ test ("[ ]") лПНБОДБ test РТПЧЕТСЕФ ЧЩРПМОЕОЙЕ ОЕЛПФПТПЗП ХУМПЧЙС. у ЙУРПМШЪПЧБОЙЕН ЬФПК (ЧУФТПЕООПК) ЛПНБОДЩ ЖПТНЙТХАФУС ПРЕТБФПТЩ ЧЩВПТБ Й ГЙЛМБ СЪЩЛБ shell. дЧБ ЧПЪНПЦОЩИ ЖПТНБФБ ЛПНБОДЩ: test ХУМПЧЙЕ ЙМЙ [ ХУМПЧЙЕ ] НЩ ВХДЕН РПМШЪПЧБФШУС ЧФПТЩН ЧБТЙБОФПН, Ф.Е. ЧНЕУФП ФПЗП, ЮФПВЩ РЙУБФШ РЕТЕД ХУМПЧЙЕН УМПЧП "test", ВХДЕН ЪБЛМАЮБФШ ХУМПЧЙЕ Ч УЛПВЛЙ, ЮФП ВПМЕЕ РТЙЧЩЮОП ДМС РТПЗТБННЙУФПЧ. оБ УБНПН ДЕМЕ shell ВХДЕФ ТБУРПЪОБЧБФШ ЬФХ ЛПНБОДХ РП ПФЛТЩЧБАЭЕК УЛПВЛЕ "[", ЛБЛ УМПЧХ(!), УППФЧЕФУЧХАЭЕНХ ЛПНБОДЕ "test". хЦЕ ЬФПЗП ДПУФБФПЮОП, ЮФПВЩ РТЕДХРТЕДЙФШ П ТБУРТПУФТБОЕООПК ПЫЙВЛЕ ОБЮЙОБАЭЙИ: нЕЦДХ УЛПВЛБНЙ Й УПДЕТЦБЭЙНУС Ч ОЙИ ХУМПЧЙЕН ПВСЪБФЕМШОП ДПМЦОЩ ВЩФШ РТПВЕМЩ. рТПВЕМЩ ДПМЦОЩ ВЩФШ Й НЕЦДХ ЪОБЮЕОЙСНЙ Й УЙНЧПМПН УТБЧОЕОЙС ЙМЙ ПРЕТБГЙЙ (ЛБЛ, ЛУФБФЙ, Й Ч ЛПНБОДЕ "expr"). оЕ РХФБФШ У РТПФЙЧПРПМПЦОЩН ФТЕВПЧБОЙЕН ДМС РТЙУЧБЙЧБОЙС ЪОБЮЕОЙК РЕТЕНЕООЩН. ч shell ЙУРПМШЪХАФУС ХУМПЧЙС ТБЪМЙЮОЩИ "ФЙРПЧ". хумпчйс ртпчетлй жбкмпч: -f file - ЖБКМ "file" СЧМСЕФУС ПВЩЮОЩН ЖБКМПН; -d file - ЖБКМ "file" - ЛБФБМПЗ; -У file - ЖБКМ "file" - УРЕГЙБМШОЩК ЖБКМ; -r file - ЙНЕЕФУС ТБЪТЕЫЕОЙЕ ОБ ЮФЕОЙЕ ЖБКМБ "file"; -w file - ЙНЕЕФУС ТБЪТЕЫЕОЙЕ ОБ ЪБРЙУШ Ч ЖБКМ "file"; -s file - ЖБКМ "file" ОЕ РХУФПК. рТЙНЕТЩ. чЧПДС У ЛМБЧЙБФХТЩ ЛПНБОДОЩЕ УФТПЛЙ Ч РЕТЧПН УМХЮБЕ РПМХЮЙН РПДФЧЕТЦДЕОЙЕ (ЛПД ЪБЧЕТЫЕОЙС "0"), Б ЧП ЧФПТПН - ПРТПЧЕТЦЕОЙЕ (ЛПД ЪБЧЕТЫЕОЙС "1"). "specific" - ЙНС УХЭЕУФЧХАЭЕЗП ЖБКМБ. [ -f specific ] ; echo $? 0 [ -d specific ] ; echo $? 1 хумпчйс ртпчетлй уфтпл: str1 = str2 - УФТПЛЙ "str1" Й "str2" УПЧРБДБАФ; str1 != str2 - УФТПЛЙ "str1" Й "str2" ОЕ УПЧРБДБАФ; -n str1 - УФТПЛБ "str1" УХЭЕУФЧХЕФ (ОЕРХУФБС); -z str1 УФТПЛБ "str1" ОЕ УХЭЕУФЧХЕФ (РХУФБС). рТЙНЕТЩ. x="who is who"; export x; [ "who is who" = "$x" ]; echo $? 0 x=abc ; export x ; [ abc = "$x" ] ; echo $? 0 x=abc ; export x ; [ -n "$x" ] ; echo $? 0 x="" ; export x ; [ -n "$x" ] ; echo $? 1 чбцопе ъбнеюбойе. лПНБОДБ "test" ДБЕФ ЪОБЮЕОЙЕ "ЙУФЙОБ" (Ф.Е. ЛПД ЪБЧЕТЫЕОЙС "0") Й РТПУФП ЕУМЙ Ч УЛПВЛБИ УФПЙФ ОЕРХУФПЕ УМПЧП. [ privet ] ; echo $? 0 [ ] ; echo $? 1 лТПНЕ ФПЗП, УХЭЕУФЧХАФ ДЧБ УФБОДБТФОЩИ ЪОБЮЕОЙС ХУМПЧЙС, ЛПФПТЩЕ НПЗХФ ЙУРПМШЪПЧБФШУС ЧНЕУФП ХУМПЧЙС (ДМС ЬФПЗП ОЕ ОХЦОЩ УЛПВЛЙ). true ; echo $? 0 false ; echo $? 1 хумпчйс утбчоеойс гемщи юйуем: x -eq y - "x" ТБЧОП "y", x -ne y - "x" ОЕТБЧОП "y", x -gt y - "x" ВПМШЫЕ "y", x -ge y - "x" ВПМШЫЕ ЙМЙ ТБЧОП "y", x -lt y - "x" НЕОШЫЕ "y", x -le y - "x" НЕОШЫЕ ЙМЙ ТБЧОП "y". фП ЕУФШ Ч ДБООПН УМХЮБЕ ЛПНБОДБ "test" ЧПУРТЙОЙНБЕФ УФТПЛЙ УЙНЧПМПЧ ЛБЛ ГЕМЩЕ (!) ЮЙУМБ. рПЬФПНХ ЧП ЧУЕИ ПУФБМШОЩИ УМХЮБСИ "ОХМЕЧПНХ" ЪОБЮЕОЙА УППФЧЕФУФЧХЕФ РХУФБС УФТПЛБ. ч ДБООПН ЦЕ УМХЮБЕ, ЕУМЙ ОБДП ПВОХМЙФШ РЕТЕНЕООХА, УЛБЦЕН, "x", ФП ЬФП ДПУФЙЗБЕФУС РТЙУЧБЙЧБОЙЕН "x=0". рТЙНЕТЩ. x=abc ; export x ; [ abc -eq "$x" ] ; echo $? "[": integer expression expected before -eq x=321 ; export x ; [ 321 -eq "$x" ] ; echo $? 0 x=3.21 ; export x ; [ 3.21 -eq "$x" ] ; echo $? "[": integer expression expected before -eq x=321 ; export x ; [ 123 -lt "$x" ] ; echo $? 0 умпцоще хумпчйс: тЕБМЙЪХАФУС У РПНПЭША ФЙРПЧЩИ МПЗЙЮЕУЛЙИ ПРЕТБГЙК: ! - (not) ЙОЧЕТФЙТХЕФ ЪОБЮЕОЙЕ ЛПДБ ЪБЧЕТЫЕОЙС. -o - (or) УППФЧЕФУЧХЕФ МПЗЙЮЕУЛПНХ "ймй". -a - (and) УППФЧЕФУЧХЕФ МПЗЙЮЕУЛПНХ "й". ртедхртецдеойе. оЕ ЪБВЩЧБКФЕ П РТПВЕМБИ. рТЙНЕТЩ. [ ! privet ] ; echo $? 1 x=privet; export x; [ "$x" -a -f specific ] ; echo $? 0 x="";export x; [ "$x" -a -f specific ] ; echo $? 1 x="";export x; [ "$x" -a -f specific -o privet ] ; echo $? 0 x="";export x; [ "$x" -a -f specific -o ! privet ] ; echo $? 1 упчеф. оЕ ЪМПХРПФТЕВМСФШ УМПЦОЩНЙ ХУМПЧЙСНЙ. 5.2. хУМПЧОЩК ПРЕТБФПТ "if" ч ПВЭЕН УМХЮБЕ ПРЕТБФПТ "if" ЙНЕЕФ УФТХЛФХТХ if ХУМПЧЙЕ then УРЙУПЛ [elif ХУМПЧЙЕ then УРЙУПЛ] [else УРЙУПЛ] fi ъДЕУШ "elif" УПЛТБЭЕООЩК ЧБТЙБОФ ПФ "else if" НПЦЕФ ВЩФШ ЙУРПМШЪПЧБО ОБТСДХ У РПМОЩН, Ф.Е. ДПРХУЛБЕФУС ЧМПЦЕОЙЕ РТПЙЪЧПМШОПЗП ЮЙУМБ ПРЕТБФПТПЧ "if" (ЛБЛ Й ДТХЗЙИ ПРТЕБФПТПЧ). тБЪХНЕЕФУС "УРЙУПЛ" Ч ЛБЦДПН УМХЮБЕ ДПМЦЕО ВЩФШ ПУНЩУМЕООЩК Й ДПРХУФЙНЩК Ч ДБООПН ЛПОФЕЛУФЕ. лПОУФТХЛГЙЙ [elif ХУМПЧЙЕ then УРЙУПЛ] Й [else УРЙУПЛ] ОЕ СЧМСАФУС ПВСЪБФЕМШОЩНЙ (Ч ДБООПН УМХЮБЕ ДМС ХЛБЪБОЙС ОБ ОЕПВСЪБФЕМШОПУФШ ЛПОУФТХЛГЙК ЙУРПМШЪПЧБОЩ ЛЧБДТБФОЩЕ УЛПВЛЙ - ОЕ РХФБФШ У ЛЧБДТБФОЩНЙ УЛПВЛБНЙ ЛПНБОДЩ "test"!). уБНБС ХУЕЮЕООБС УФТХЛФХТБ ЬФПЗП ПРЕТБФПТБ if ХУМПЧЙЕ then УРЙУПЛ fi ЕУМЙ ЧЩРПМОЕОП ХУМПЧЙЕ (ЛБЛ РТБЧЙМП ЬФП ЛПН РПМХЮЕО ЛПД ЪБЧЕТЫЕОЙС "0", ФП ЧЩРПМОСЕФУС "УРЙУПЛ", ЙОБЮЕ ПО РТПРХУЛБЕФУС. пВТБФЙФЕ ЧОЙНБОЙЕ, ЮФП УФТХЛФХТБ ПВСЪБФЕМШОП ЪБЧЕТЫБЕФУС УМХЦЕВОЩН УМПЧПН "fi". юЙУМП "fi", ЕУФЕУФЧЕООП, ЧУЕЗДБ ДПМЦОП УППФЧЕФУЧПЧБФШ ЮЙУМХ "if". рТЙНЕТЩ. рХУФШ ОБРЙУБО ТБУЮЕФ "if-1" if [ $1 -gt $2 ] then pwd else echo $0 : Hello! fi фПЗДБ ЧЩЪПЧ ТБУЮЕФБ if-1 12 11 ДБУФ /home/sae/STUDY/SHELL Б if-1 12 13 ДБУФ if-1 : Hello! чПЪНПЦОП ЙУРПМШЪПЧБФШ Ч ХУМПЧЙЙ ФП УЧПКУФЧП shell, ЮФП ЛПНБОДЩ НПЗХФ ЧЩДБЧБФШ ТБЪМЙЮОЩК ЛПД ЪБЧЕТЫЕОЙС. ьФП ОБРПНЙОБЕФ РТЙЕНЩ РТПЗТБННЙТПЧБОЙС ОБ уЙ. рХУФШ ТБУЮЕФ "if-2" ВХДЕФ if a=`expr "$1" : "$2"` then echo then a=$a code=$? else echo else a=$a code=$? fi ФПЗДБ ЧЩЪПЧ if-2 by by ДБУФ then a=2 code=0 Б if-2 by be ДБУФ else a=0 code=1 еЭЕ РТЙНЕТ ОБ ЧМПЦЕООПУФШ ### # if-3: пГЕОЛБ ДПУФЙЦЕОЙК echo -n " б ЛБЛХА ПГЕОЛХ РПМХЮЙМ ОБ ЬЛЪБНЕОЕ?: " read z if [ $z = 5 ] then echo нПМПДЕГ ! elif [ $z = 4 ] then echo чУЕ ТБЧОП НПМПДЕГ ! elif [ $z = 3 ] then echo чУЕ ТБЧОП ! elif [ $z = 2 ] then echo чУЕ ! else echo ! fi нПЦОП ПВТБФЙФШ ЧОЙНБОЙЕ ОБ ФП, ЮФП ЦЕМБФЕМШОП ЙУРПМШЪПЧБФШ УДЧЙЗЙ РТЙ ЪБРЙУЙ РТПЗТБНН, ЮФПВЩ МХЮЫЕ ЧЩДЕМЙФШ ЧМПЦЕООПУФШ УФТХЛФХТ. 5.3. пРЕТБФПТ ЧЩВПЧБ ("case") пРЕТБФПТ ЧЩВПТБ "case" ЙНЕЕФ УФТХЛФХТХ: case УФТПЛБ in ЫБВМПО) УРЙУПЛ ЛПНБОД;; ЫБВМПО) УРЙУПЛ ЛПНБОД;; ... esac ъДЕУШ "case" "in" Й "esac" - УМХЦЕВОЩЕ УМПЧБ. "уФТПЛБ" (ЬФП НПЦЕФ ВЩФШ Й ПДЙО УЙНЧПМ) УТБЧОЙЧБЕФУС У "ЫБВМПОПН". ъБФЕН ЧЩРПМОСЕФУС "УРЙУПЛ ЛПНБОД" ЧЩВТБООПК УФТПЛЙ. оЕРТЙЧЩЮОЩН ВХДЕФ УМХЦЕВОПЕ УМПЧП "esac", ОП ПОП ОЕПВИПДЙНП ДМС ЪБЧЕТЫЕОЙС УФТХЛФХТЩ. рТЙНЕТ. ### # case-1: уФТХЛФХТБ "case". # хЦЕ ТБУУНБФТЙЧБЧЫЙКУС Ч УЧСЪЙ УП # УФТХЛФХТПК "if" РТЙНЕТ РТПЭЕ Й # ОБЗМСДОЕЕ НПЦОП ТЕБМЙЪПЧБФШ У # РПНПЭША УФТХЛФХТЩ "case". echo -n " б ЛБЛХА ПГЕОЛХ РПМХЮЙМ ОБ ЬЛЪБНЕОЕ?: " read z case $z in 5) echo нПМПДЕГ ! ;; 4) echo чУЕ ТБЧОП НПМПДЕГ ! ;; 3) echo чУЕ ТБЧОП ! ;; 2) echo чУЕ ! ;; *) echo ! ;; esac оЕРТЙЧЩЮОП ЧЩЗМСДСФ Ч ЛПОГЕ УФТПЛ ЧЩВПТБ ";;", ОП ОБРЙУБФШ ЪДЕУШ ";" ВЩМП ВЩ ПЫЙВЛПК. дМС ЛБЦДПК БМШФЕТОБФЙЧЩ НПЦЕФ ВЩФШ ЧЩРПМОЕОП ОЕУЛПМШЛП ЛПНБОД. еУМЙ ЬФЙ ЛПНБОДЩ ВХДХФ ЪБРЙУБОЩ Ч ПДОХ УФТПЛХ, ФП УЙНЧПМ ";" ВХДЕФ ЙУРПМШЪПЧБФШУС ЛБЛ ТБЪДЕМЙФЕМШ ЛПНБОД. пВЩЮОП РПУМЕДОСС УФТПЛБ ЧЩВПТБ ЙНЕЕФ ЫБВМПО "*", ЮФП Ч УФТХЛФХТЕ "case" ПЪОБЮБЕФ "МАВПЕ ЪОБЮЕОЙЕ". ьФБ УФТПЛБ ЧЩВЙТБЕФУС, ЕУМЙ ОЕ РТПЙЪПЫМП УПЧРБДЕОЙЕ ЪОБЮЕОЙС РЕТЕНЕООПК (ЪДЕУШ $z) ОЙ У ПДОЙН ЙЪ ТБОЕЕ ЪБРЙУБООЩИ ЫБВМПОПЧ, ПЗТБОЙЮЕООЩИ УЛПВЛПК ")". ъОБЮЕОЙС РТПУНБФТЙЧБАФУС Ч РПТСДЛЕ ЪБРЙУЙ. ### # case-2: уРТБЧПЮОЙЛ. # дМС ТБЪМЙЮОЩИ ЖЙТН РП ЙНЕОЙ ЧЩДБЕФУС # ОБЪЧБОЙЕ ИПМДЙОЗБ, Ч ЛПФПТЩК ПОБ ЧИПДЙФ case $1 in ONE|TWO|THREE) echo иПМДЙОЗ: ZERO ;; MMM|WWW) echo иПМДЙОЗ: Not-Net ;; Hi|Hello|Howdoing) echo иПМДЙОЗ: рТЙЧЕФ! ;; *) echo оЕФ ФБЛПК ЖЙТНЩ ;; esac рТЙ ЧЩЪПЧЕ "case-2 Hello" ОБ ЬЛТБО ВХДЕФ ЧЩЧЕДЕОП: иПМДЙОЗ: рТЙЧЕФ! б РТЙ ЧЩЪПЧЕ "case-2 HELLO" ОБ ЬЛТБО ВХДЕФ ЧЩЧЕДЕОП: оЕФ ФБЛПК ЖЙТНЩ лПМШ УЛПТП УМПЧП "case" РЕТЕЧПДЙФУС ЛБЛ "ЧЩВПТ", ФП ЬФП ЛБЛ ВЩ ОБНЕЛ ОБ ФП, ЮФП НПЦОП ЬФХ УФТХЛФХТХ ЙУРПМШЪПЧБФШ ДМС ТЕБМЙЪБГЙЙ РТПУФЕКЫЙИ НЕОА. ### # case-3: тЕБМЙЪБГЙС НЕОА У РПНПЭША ЛПНБОДЩ "case" echo "оБЪПЧЙФЕ ЖБКМ, Б ЪБФЕН (ЮЕТЕЪ РТПВЕМ) ОБВЕТЙФЕ ГЙЖТХ, УППФЧЕФУФЧХАЭХА ФТЕВХЕНПК ПВТБВПФЛЕ: 1 - ПФУПТФЙТПЧБФШ 2 - ЧЩДБФШ ОБ ЬЛТБО 3 - ПРТЕДЕМЙФШ ЮЙУМП УФТПЛ " read x y # x - ЙНС ЖБКМБ, y - ЮФП УДЕМБФШ case $y in 1) sort >" - РЕТЕОБРТБЧМЕОЙЕ У ДПВБЧМЕОЙЕН Ч ЖБКМ case $# in 1) cat >> $1 ;; 2) cat >> $2 ${1}_sorted Ф.Е. РПУМЕДПЧБФЕМШОП УПТФЙТХАФУС ХЛБЪБООЩЕ ЖБКМЩ, ТЕЪХМШФБФЩ УПТФЙТПЧЛЙ ЧЩЧПДСФУС ОБ РЕЮБФШ ("/dev/lp") Й ОБРТБЧМСАФУС Ч ЖБКМЩ f1_sorted f2_sorted Й f3_sorted нПЦОП УДЕМБФШ ВПМЕЕ ХОЙЧЕТУБМШОПК ЛПНБОДХ "lsort", ЕУМЙ ОЕ ЖЙЛУЙТПЧБФШ РЕТЕЮЕОШ ЖБКМПЧ Ч ЛПНБОДЕ, Б РЕТЕДБЧБФШ РТПЙЪЧПМШОПЕ ЙИ ЮЙУМП РБТБНЕФТБНЙ. фПЗДБ ЗПМПЧОБС РТПЗТБННБ ВХДЕФ УМЕДХАЭЕК: for i do proc-sort $i done ъДЕУШ ПФУХФУФЧЙЕ РПУМЕ "i" УМХЦЕВОПЗП УМПЧБ "in" У РЕТЕЮЙУМЕОЙЕН ЙНЕО ЗПЧПТЙФ П ФПН , ЮФП УРЙУПЛ РПУФХРБЕФ ЮЕТЕЪ РБТБНЕФТЩ ЛПНБОДЩ. тЕЪХМШФБФ РТЕДЩДХЭЕЗП РТЙНЕТБ НПЦОП РПМХЮЙФШ, ОБВТБЧ lsort f1 f2 f3 хУМПЦОЙН ТБОЕЕ ТБУУНБФТЙЧБЧЫХАУС ЪБДБЮХ (РПД ЙНЕОЕН "case-2") ПРТЕДЕМЕОЙС ИПМДЙОЗБ ЖЙТНЩ. фЕРЕТШ НПЦОП РТЙ ЧЩЪПЧЕ ХЛБЪЩЧБФШ РТПЙЪЧПМШОПЕ ЛПМЙЮЕУФЧП ЖЙТН. рТЙ ПФУХФУФЧЙЙ Ч УФТХЛФХТЕ ПРЕТБФПТБ "for" ЖТБЗНЕОФБ "in УРЙУПЛ ЪОБЮЕОЙК", ЪОБЮЕОЙС ВЕТХФУС ЙЪ РБТБНЕФТПЧ ЧЩЪЩЧБАЭЕК ЛПНБОДЩ. ### # holding: уРТБЧПЮОЙЛ. # дМС ТБЪМЙЮОЩИ ЖЙТН РП ЙНЕОЙ ЧЩДБЕФУС # ОБЪЧБОЙЕ ИПМДЙОЗБ, Ч ЛПФПТЩК ПОБ ЧИПДЙФ for i do case $i in ONE|TWO|THREE) echo иПМДЙОЗ: ZERO ;; MMM|WWW) echo иПМДЙОЗ: Not-Net ;; Hi|Hello|Howdoing) echo иПМДЙОЗ: рТЙЧЕФ! ;; *) echo оЕФ ФБЛПК ЖЙТНЩ ;; esac done рТЙ ЧЩЪПЧЕ "holding Hello HELLO ONE" ОБ ЬЛТБОЕ ВХДЕФ: иПМДЙОЗ: рТЙЧЕФ! оЕФ ФБЛПК ЖЙТНЩ иПМДЙОЗ: Not-Net еЭЕ РТЙНЕТ. ### # subdir: чЩДБЕФ ЙНЕОБ ЧУЕИ РПДДЙТЕЛФПТЙЕЧ # ДЙТЕЛФПТЙС У ЙНЕОЕН $dir for i in $dir/* do if [ -d $i ] then echo $i fi done уМЕДХАЭЙК ТБУЮЕФ ЙММАУФТЙТХЕФ РПМЕЪОЩК, ИПФС Й У ДПМЕК ФТАЛБЮЕУФЧБ, УРПУПВ РПЧФПТЕОЙС ПДОЙИ Й ФЕИ ЦЕ ДЕКУФЧЙК ОЕУЛПМШЛП ТБЪ. рЕТЕНЕООЩС "i" РТЙОЙНБЕФ ЪДЕУШ РСФШ ЪОБЮЕОЙК: 1, 2, 3, 4, 5, ОП ЧОХФТЙ ГЙЛМБ ЬФБ РЕТЕНЕООБС ПФУХФУФЧХЕФ Й РПЬФПНХ ЕЕ ЪОБЮЕОЙЕ ОЙЛБЛПК ТПМЙ ОЕ ЙЗТБЕФ Й ОЙ ЮЕЗП ОЕ НЕОСЕФ. у ФБЛЙН ЦЕ ХУРЕИПН РЕТЕНЕООБС "i" НПЗМБ РТЙОЙНБФШ ЪОБЮЕОЙС, УЛБЦЕН Ж П Л Х У , Б Ч ТЕЪХМШФБФЕ ФПЮОП ФБЛЦЕ ВЩМП ВЩ РСФШ ТБЪ РПЧФПТЕОП ПДОП Й ФП ЦЕ ЧЩЮЙУМЕОЙЕ УПДЕТЦЙНПЗП ГЙЛМБ ВЕЪ ЙЪНЕОЕОЙК. ### # print-5: пТЗБОЙЪБГЙЙ РСФЙЛТБФОПЗП ЧЩРПМОЕОЙС ЛПНБОДЩ for i in 1 2 3 4 5 do cat file-22 > /dev/lp done тБУЮЕФ "print-n" ЙММАУФТЙТХЕФ ЕЭЕ ПДОХ РПМЕЪОХА ЧПЪНПЦОПУФШ Ч ЙУРПМШЪПЧБОЙЙ ГЙЛМБ "for". ъДЕУШ, РПУМЕ "for i ...", ПФУХФУФЧХАФ "in ..." Й РЕТЕЮЕОШ ЙНЕО, Ф.Е. РЕТЕЮОЕН ЙНЕО ДМС "i" УФБОПЧЙФУС РЕТЕЮЕОШ РБТБНЕФТПЧ, Б УМЕДПЧБФЕМШОП ЛПМЙЮЕУФЧП РЕЮБФБЕНЩИ ЬЛЪЕНРМСТПЧ НПЦОП НЕОСФШ. ### # print-n: ъБДБОЙЕ ЮЙУМБ ЛПРЙК # ЮЕТЕЪ РБТБНЕФТЩ for i do cat file-22 > /dev/lp done уНЩУМ ОЕ ЙЪНЕОЙФУС, ЕУМЙ РЕТЧХА УФТПЛХ ТБУЮЕФБ ЪБРЙУБФШ ЛБЛ for i in $* РПУЛПМШЛХ ЪОБЮЕОЙЕ "$*" - ЕУФШ УРЙУПЛ ЪОБЮЕОЙК РБТБНЕФТПЧ. пФНЕФЙН ТБЪМЙЮЙЕ Ч УРЕГЙБМШОЩИ РЕТЕНЕООЩИ "$*" Й "$@", РТЕДУФБЧМСАЭЙИ РЕТЕЮЕОШ РБТБНЕФТПЧ. рЕТЧЩК РТЕДУФБЧМСЕФ РБТБНЕФТЩ, ЛБЛ УФТПЛХ, Б ЧФПТПК, ЛБЛ УПЧПЛХРОПУФШ УМПЧ. рХУФШ ЛПНБОДОЩК ЖБКМ "cmp" ЙНЕЕФ ЧЙД: for i in "$*" do echo $i done echo for i in "$@" do echo $i done рТЙ ЧЩЪПЧЕ cmp aa bb cc ОБ ЬЛТБО ВХДЕФ ЧЩЧЕДЕОП aa bb cc aa bb cc 5.4. пРЕТБФПТ ГЙЛМБ У ЙУФЙООЩН ХУМПЧЙЕН ("while") уФТХЛФХТБ "while", ФБЛЦЕ ПВЕУРЕЮЙЧБАЭБС ЧЩРПМОЕОЙЕ ТБУЮЕФПЧ, РТЕДРПЮФЙФЕМШОЕЕ ФПЗДБ, ЛПЗДБ ОЕЙЪЧЕУФЕО ЪБТБОЕЕ ФПЮОЩК УРЙУПЛ ЪОБЮЕОЙК РБТБНЕФТПЧ ЙМЙ ЬФПФ УРЙУПЛ ДПМЦЕО ВЩФШ РПМХЮЕО Ч ТЕЪХМШФБФЕ ЧЩЮЙУМЕОЙК Ч ГЙЛМЕ. пРЕТБФПТ ГЙЛМБ "while" ЙНЕЕФ УФТХЛФХТХ: while ХУМПЧЙЕ do УРЙУПЛ ЛПНБОД done ЗДЕ "while" - УМХЦЕВОПЕ УМПЧП ПРТЕДЕМСАЭЕЕ ФЙР ГЙЛМБ У ЙУФЙООЩН ХУМПЧЙЕН. уРЙУПЛ ЛПНБОД Ч ФЕМЕ ГЙЛМБ (НЕЦДХ "do" Й "done") РПЧФПТСЕФУС ДП ФЕИ РПТ, РПЛБ УПИТБОСЕФУС ЙУФЙООПУФШ ХУМПЧЙС (Ф.Е. ЛПД ЪБЧЕТЫЕОЙС РПУМЕДОЕК ЛПНБОДЩ Ч ФЕМЕ ГЙЛМБ ТБЧЕО "0") ЙМЙ ГЙЛМ ОЕ ВХДЕФ РТЕТЧБО ЙЪОХФТЙ УРЕГЙБМШОЩНЙ ЛПНБОДБНЙ ("break", "continue" ЙМЙ "exit"). рТЙ РЕТЧПН ЧИПДЕ Ч ГЙЛМ ХУМПЧЙЕ ДПМЦОП ЧЩРПМОСФШУС. ### # print-50: уФТХЛФХТБ "while" # тБУЮЕФ РПЪЧПМСЕФ ОБРЕЮБФБФШ 50 # ЬЛЪЕНРМСТПЧ ЖБКМБ "file-22" n=0 while [ $n -lt 50 ] # РПЛБ n /dev/lp done пВТБФЙН ЧОЙНБОЙЕ ОБ ФП, ЮФП РЕТЕНЕООПК "n" ЧОБЮБМЕ РТЙУЧБЙЧБЕФУС ЪОБЮЕОЙЕ 0, Б ОЕ РХУФБС УФТПЛБ, ФБЛ ЛБЛ ЛПНБОДБ "expr" ТБВПФБЕФ У shell-РЕТЕНЕООЩНЙ ЛБЛ У ГЕМЩНЙ ЮЙУМБНЙ, Б ОЕ ЛБЛ УП УФТПЛБНЙ. n=`expr $n + 1` Ф.Е. РТЙ ЛБЦДПН ЧЩРПМОЕОЙЙ ЪОБЮЕОЙЕ "n" ХЧЕМЙЮЙЧБЕФУС ОБ 1. лБЛ Й ЧППВЭЕ Ч ЦЙЪОЙ, НПЦОП ТЕБМЙЪПЧБФШ ФП ЦЕ УБНПЕ Й УМПЦОЕЕ. тБУЮЕФ "Тr-br" РТЙЧЕДЕО ДМС ЙММАУФТБГЙЙ ВЕУЛПОЕЮОПЗП ГЙЛМБ Й ЙУРПМШЪПЧБОЙС ЛПНБОДЩ "break", ЛПФПТБС ПВЕУРЕЮЙЧБЕФ РТЕЛТБЭЕОЙЕ ГЙЛМБ. ### # Тr-br: уФТХЛФХТБ "while" c "break" # тБУЮЕФ РПЪЧПМСЕФ ОБРЕЮБФБФШ 50 # ЬЛЪЕНРМСТПЧ ЖБКМБ "file-22" n=0 while true do if [ $n -lt 50 ] # ЕУМЙ n /dev/lp done лПНБОДБ "break [n]" РПЪЧПМСЕФ ЧЩИПДЙФШ ЙЪ ГЙЛМБ. еУМЙ "n" ПФУХФУФЧХЕФ, ФП ЬФП ЬЛЧЙЧБМЕОФОП "break 1". "n" ХЛБЪЩЧБЕФ ЮЙУМП ЧМПЦЕООЩИ ГЙЛМПЧ, ЙЪ ЛПФПТЩИ ОБДП ЧЩКФЙ, ОБРТЙНЕТ, "break 3" - ЧЩИПД ЙЪ ФТЕИ ЧМПЦЕООЩИ ГЙЛМПЧ. ч ПФМЙЮЙЕ ПФ ЛПНБОДЩ "break" ЛПНБОДБ "continue [n]" МЙЫШ РТЕЛТБЭБЕФ ЧЩРПМОЕОЙЕ ФЕЛХЭЕЗП ГЙЛМБ Й ЧПЪЧТБЭБЕФ ОБ обюбмп ГЙЛМБ. пОБ ФБЛЦЕ НПЦЕФ ВЩФШ У РБТБНЕФТПН. оБРТЙНЕТ, "continue 2" ПЪОБЮБЕФ ЧЩИПД ОБ ОБЮБМП ЧФПТПЗП (ЕУМЙ УЮЙФБФШ ЙЪ ЗМХВЙОЩ) ЧМПЦЕООПЗП ГЙЛМБ. лПНБОДБ "exit [n]" РПЪЧПМСЕФ ЧЩКФЙ ЧППВЭЕ ЙЪ РТПГЕДХТЩ У ЛПДПН ЧПЪЧТБФБ "0" ЙМЙ "n" (ЕУМЙ РБТБНЕФТ "n" ХЛБЪБО). ьФБ ЛПНБОДБ НПЦЕФ ЙУРПМШЪПЧБФШУС ОЕ ФПМШЛП Ч ГЙЛМБИ. дБЦЕ Ч МЙОЕКОПК РПУМЕДПЧБФЕМШОПУФЙ ЛПНБОД ПОБ НПЦЕФ ВЩФШ РПМЕЪОБ РТЙ ПФМБДЛЕ, ЮФПВЩ РТЕЛТБФЙФ ЧЩРПМОЕОЙЕ (ФЕЛХЭЕЗП) ТБУЮЕФБ Ч ЪБДБООПК ФПЮЛЕ. 5.5. пРЕТБФПТ ГЙЛМБ У МПЦОЩН ХУМПЧЙЕН ("until") пРЕТБФПТ ГЙЛМБ "until" ЙНЕЕФ УФТХЛФХТХ: until ХУМПЧЙЕ do УРЙУПЛ ЛПНБОД done ЗДЕ "until" - УМХЦЕВОПЕ УМПЧП ПРТЕДЕМСАЭЕЕ ФЙР ГЙЛМБ У МПЦОЩН ХУМПЧЙЕН. уРЙУПЛ ЛПНБОД Ч ФЕМЕ ГЙЛМБ (НЕЦДХ "do" Й "done") РПЧФПТСЕФУС ДП ФЕИ РПТ, РПЛБ УПИТБОСЕФУС МПЦОПУФШ ХУМПЧЙС ЙМЙ ГЙЛМ ОЕ ВХДЕФ РТЕТЧБО ЙЪОХФТЙ УРЕГЙБМШОЩНЙ ЛПНБОДБНЙ ("break", "continue" ЙМЙ "exit"). рТЙ РЕТЧПН ЧИПДЕ Ч ГЙЛМ ХУМПЧЙЕ ОЕ ДПМЦОП ЧЩРПМОСФШУС. пФМЙЮЙЕ ПФ ПРЕТБФПТБ "while" УПУФПЙФ Ч ФПН, ЮФП ХУМПЧЙЕ ГЙЛМБ РТПЧЕТСЕФУС ОБ МПЦОПУФШ (ОБ ОЕОХМЕЧПК ЛПД ЪБЧЕТЫЕОЙС РПУМЕДОЕК ЛПНБОДЩ ФЕМБ ГЙЛМБ) РТПЧЕТСЕФУС рпуме ЛБЦДПЗП (Ч ФПН ЮЙУМЕ Й РЕТЧПЗП!) ЧЩРПМОЕОЙС ЛПНБОД ФЕМБ ГЙЛМБ. рТПЗТБННЙУФПЧ, ЪОБЛПНЩИ У ПРЕТБФПТБНЙ "until" Ч ДТХЗЙИ СЪЩЛБИ НПЦЕФ ЧОБЮБМЕ УВЙЧБФШ ФБЛБС УЕНБОФЙЛБ ЬФПЗП ПРЕТБФПТБ. рТЙНЕТЩ. until false do read x if [ $x = 5 ] then echo enough ; break else echo some more fi done ъДЕУШ РТПЗТБННБ У ВЕУЛПОЕЮОЩН ГЙЛМПН ЦДЕФ ЧЧПДБ УМПЧ (РПЧФПТСС ОБ ЬЛТБОЕ ЖТБЪХ "some more"), РПЛБ ОЕ ВХДЕФ ЧЧЕДЕОП "5". рПУМЕ ЬФПЗП ЧЩДБЕФУС "enough" Й ЛПНБОДБ "break" РЕТЛТБЭБЕФ ЧЩРПМОЕОЙЕ ГЙЛМБ. дТХЗПК РТЙНЕТ ("пЦЙДБОЙЕ РПМДОС") ЙММАУФТЙТХЕФ ЧПЪНПЦОПУФШ ЙУРПМШЪПЧБФШ Ч ХУМПЧЙЙ ЧЩЮЙУМЕОЙС. until date | grep 12:00: do sleep 30 done ъДЕУШ ЛБЦДЩЕ 30 УЕЛХОД ЧЩРПМОСЕФУС ЛПНБОДОБС УФТПЛБ ХУМПЧЙС. лПНБОДБ "date" ЧЩДБЕФ ФЕЛХЭХА ДБФХ Й ЧТЕНС. лПНБОДБ "grep" РПМХЮБЕФ ЬФХ ЙОЖПТНБГЙА ЮЕТЕЪ ЛПОЧЕКЕТ Й РЩФБЕФУС УПЧНЕУФЙФШ ЪБДБООЩК ЫБВМПО "12:00:" У ЧТЕНЕОЕН, ЧЩДБЧБЕНЩН ЛПНБОДПК "date". рТЙ ОЕУПЧРБДЕОЙЙ "grep" ЧЩДБЕФ ЛПД ЧПЪЧТБФБ "1", ЮФП УППФЧЕФУЧХЕФ ЪОБЮЕОЙА "МПЦШ", Й ГЙЛМ "ЧЩРПМОСЕФ ПЦЙДБОЙЕ" Ч ФЕЮЕОЙЕ 30 УЕЛХОД, РПУМЕ ЮЕЗП РПЧФПТСЕФУС ЧЩРПМОЕОЙЕ ХУМПЧЙС. ч РПМДЕОШ (ЧПЪНПЦОП У ОЕУЛПМШЛЙНЙ УЕЛХОДБНЙ) РТПЙЪПКДЕФ УТБЧОЕОЙЕ, ХУМПЧЙЕ УФБОЕФ ЙУФЙООЩН, "grep" ЧЩДБУФ ОБ ЬЛТБО УППФЧЕФУЧХАЭХА УФТПЛХ Й ТБВПФБ ГЙЛМБ ЪБЛПОЮЙФУС. 5.6. рХУФПК ПРЕТБФПТ рХУФПК ПРЕТБФПТ ЙНЕЕФ ЖПТНБФ : оЙЮЕЗП ОЕ ДЕМБЕФ. чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ "0". оБРТЙНЕТ, Ч ЛПОУФТХЛГЙЙ "while :" ЙМЙ УФБЧЙФШ Ч ОБЮБМЕ ЛПНБОДОПЗП ЖБКМБ, ЮФПВЩ ЗБТБОФЙТПЧБФШ, ЮФП ЖБКМ ОЕ ВХДЕФ РТЙОСФ ЪБ ЧЩРПМОСЕНЩК ЖБКМ ДМС "csh". 5.7. жХОЛГЙЙ Ч shell жХОЛГЙС РПЪЧПМСЕФ РПДЗПФПЧЙФШ УРЙУПЛ ЛПНБОД shell ДМС РПУМЕДХАЭЕЗП ЧЩРПМОЕОЙС. пРЙУБОЙЕ ЖХОЛГЙЙ НЕЕФ ЧЙД: ЙНС() { УРЙУПЛ ЛПНБОД } РПУМЕ ЮЕЗП ПВТБЭЕОЙЕ Л ЖХОЛГЙЙ РТПЙУИПДЙФ РП ЙНЕОЙ. рТЙ ЧЩРПМОЕОЙЙ ЖХОЛГЙЙ ОЕ УПЪДБЕФУС ОПЧПЗП РТПГЕУУБ. пОБ ЧЩРПМОСЕФУС Ч УТЕДЕ УППФЧЕФУЧХАЭЕЗП РТПГЕУУБ. бТЗХНЕОФЩ ЖХОЛГЙЙ УФБОПЧСФУС ЕЕ РПЪЙГЙПООЩНЙ РБТБНЕФТБНЙ; ЙНС ЖХОЛГЙЙ - ЕЕ ОХМЕЧПК РБТБНЕФТ. рТЕТЧБФШ ЧЩРПМОЕОЙЕ ЖХОЛГЙЙ НПЦОП ПРЕТБФПТПН "return [n]", ЗДЕ (ОЕПВСЪБФЕМШОПЕ) "n" - ЛПД ЧПЪЧТБФБ. рТЙНЕТ. чЩЪПЧ ОБ ЧЩРПМОЕОЙЕ ЖБКМБ "fun" echo $$ fn() # ПРЙУБОЙЕ ЖХОЛГЙЙ { echo xx=$xx echo $# echo $0: $$ $1 $2 xx=yy ; echo xx=$xx return 5 } xx=xx ; echo xx=$xx fn a b # ЧЩЪПЧ ЖХОЛГЙЙ "fn" У РБТБНЕФТБНЙ echo $? echo xx=$xx УПДЕТЦБЭЕЗП ПРЙУБОЙЕ Й ЧЩЪПЧ ЖХОЛГЙЙ "fn", ЧЩДБУФ ОБ ЬЛТБО: 749 xx=xx xx=xx 2 fun: 749 a b xx=yy 5 xx=yy 5.8. пВТБВПФЛБ РТЕТЩЧБОЙК ("trap") вЩЧБЕФ ОЕПВИПДЙНП ЪБЭЙФЙФШ ЧЩРПМОЕОЙЕ РТПЗТБННЩ ПФ РТЕТЩЧБОЙС. оБЙВПМЕЕ ЮБУФП РТЙИПДЙФУС ЧУФТЕЮБФШУС УП УМЕДХАЭЙНЙ РТЕТЩЧБОЙСНЙ, УППФЧЕФУЧХАЭЙНЙ УЙЗОБМБН: 0 - ЧЩИПД ЙЪ ЙОФЕТРТЕФБФПТБ, 1 - ПФВПК (ПФЛМАЮЕОЙЕ ХДБМЕООПЗП БВПОЕОФБ), 2 - РТЕТЩЧБОЙЕ ПФ , 9 - ХОЙЮФПЦЕОЙЕ (ОЕ РЕТЕИЧБФЩЧБЕФУС), 15 - ПЛПОЮБОЙЕ ЧЩРПМОЕОЙС. дМС ЪБЭЙФЩ ПФ РТЕТЩЧБОЙК УХЭЕУФЧХЕФ ЛПНБОДБ "trap", ЙНЕАЭБС ЖПТНБФ: trap 'УРЙУПЛ ЛПНБОД' УЙЗОБМЩ еУМЙ Ч УЙУФЕНЕ ЧПЪОЙЛОХФ РТЕТЩЧБОЙС, ЮШЙ УЙЗОБМЩ РЕТЕЮЙУМЕОЩ ЮЕТЕЪ РТПВЕМ Ч "УЙЗОБМЩ", ФП ВХДЕФ ЧЩРПМОЕО "УРЙУПЛ ЛПНБОД", РПУМЕ ЮЕЗП (ЕУМЙ Ч УРЙУЛЕ ЛПНБОД ОЕ ВЩМБ ЧЩРПМОЕОБ ЛПНБОДБ "exit") ХРТБЧМЕОЙЕ ЧЕТОЕФУС Ч ФПЮЛХ РТЕТЩЧБОЙС Й РТПДПМЦЙФУС ЧЩРПМОЕОЙЕ ЛПНБОДОПЗП ЖБКМБ. оБРТЙНЕТ, ЕУМЙ РЕТЕД РТЕЛТБЭЕОЙЕН РП РТЕТЩЧБОЙСН ЧЩРПМОЕОЙС ЛБЛПЗП ФП ЛПНБОДОПЗП ЖБКМБ ОЕПВИПДЙНП ХДБМЙФШ ЖБКМЩ Ч "/tmp", ФП ЬФП НПЦЕФ ВЩФШ ЧЩРПМОЕОП ЛПНБОДПК "trap": tarp 'rm /tmp/* ; exit 1' 1 2 15 ЛПФПТБС РТЕДЭЕУФЧХЕФ РТПЮЙН ЛПНБОДБН ЖБКМБ. ъДЕУШ, РПУМЕ ХДБМЕОЙС ЖБКМПЧ ВХДЕФ ПУХЭЕУФЧМЕО ЧЩИПД "exit" ЙЪ ЛПНБОДОПЗП ЖБКМБ. лПНБОДБ "trap" РПЪЧПМСЕФ Й РТПУФП ЙЗОПТЙТПЧБФШ РТЕТЩЧБОЙС, ЕУМЙ "УРЙУПЛ ЛПНБОД" РХУФПК. фБЛ ОБРТЙНЕТ, ЕУМЙ ЛПНБОДБ "cmd" ЧЩРПМОСЕФУС ПЮЕОШ ДПМЗП, Б РПМШЪПЧБФЕМШ ТЕЫЙМ ПФЛМАЮЙФШУС ПФ УЙУФЕНЩ, ФП ДМС РТПДПМЦЕОЙС ЧЩРПМОЕОЙС ЬФПК ЛПНБОДЩ НПЦОП ОБРЙУБФШ, ЪБРХУФЙЧ ЛПНБОДХ Ч ЖПОПЧПН ТЕЦЙНЕ: ( trap '' 1; cmd )&