пСЙНБНДЯРБН ОНКЭГНБЮРЕКЪ ДКЪ GNU Awk
15. аХАКХНРЕЙЮ ТСМЙЖХИ awk
15.10 нАПЮАНРЙЮ ОЮПЮЛЕРПНБ ЙНЛЮМДМНИ ЯРПНЙХаНКЭЬХМЯРБН ЯПЕДЯРБ МЮ ЯНБЛЕЯРХЛШУ Я POSIX ЯХЯРЕЛЮУ ОПХМХЛЮЧР ХГ ЙНЛЮМДМНИ ЯРПНЙХ ОЮПЮЛЕРПШ ХКХ "ОЕПЕЙКЧВЮРЕКХ", ЙНРНПШЕ ЛНЦСР ХЯОНКЭГНБЮРЭЯЪ ДКЪ ХГЛЕМЕМХЪ ОНБЕДЕМХЪ ЯННРБЕРЯРБСЧЫХУ ОПНЦПЮЛЛ. awk ЕЯРЭ ОПХЛЕП РЮЙНИ ОПНЦПЮЛЛШ. (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161). вЮЯРН ОЮПЮЛЕРПШ ХЛЕЧР ЮПЦСЛЕМРШ, Р.Е. ДЮММШЕ, Б ЙНРНПШУ МСФДЮЕРЯЪ ОПНЦПЮЛЛЮ ДКЪ ОПЮБХКЭМНЦН БШОНКМЕМХЪ РПЕАНБЮМХИ ОЮПЮЛЕРПНБ. мЮОПХЛЕП, awk-ОЮПЮЛЕРП `-F' РПЕАСЕР ЖЕОНВЙС ДКЪ СОНРПЕАКЕМХЪ Б ЙЮВЕЯРБЕ ПЮГДЕКХРЕКЪ ОНКЕИ. оЕПБНЕ БУНФДЕМХЕ Б ЙНЛЮМДМНИ ЯРПНЙЕ ХКХ `--' ХКХ ЖЕОНВЙХ, МЕ МЮВХМЮЧЫЕИЯЪ Я `-' , НГМЮВЮЕР ЙНМЕЖ ОЮПЮЛЕРПНБ. аНКЭЬХМЯРБН ЯХЯРЕЛ Unix ХЛЕЧР ТСМЙЖХЧ ЪГШЙЮ CХ Я ХЛЕМЕЛ getopt ДКЪ НАПЮАНРЙХ ЮПЦСЛЕМРНБ ЙНЛЮМДМНИ ЯРПНЙХ. оПНЦПЮЛЛХЯР БШДЮЕР ЖЕОНВЙС, НОХЯШБЮЧЫСЧ НДМНАСЙБЕММШИ ОЮПЮЛЕРП. еЯКХ ОЮПЮЛЕРП РПЕАСЕР ЙЮЙНИ-МХАСДЭ ЮПЦСЛЕМР, ГЮ МХЛ ЯКЕДСЕР ДБНЕРНВХЕ. getopt РЮЙФЕ ОЕПЕДЮЧРЯЪ ЙНКХВЕЯРБН Х ГМЮВЕМХЪ ЮПЦСЛЕМРНБ ЙНЛЮМДМНИ ЯРПНЙХ Х НМЮ БШГШБЮЕРЯЪ Б ЖХЙКЕ. getopt НАПЮАЮРШБЮЕР ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ ДКЪ АСЙБ ОЮПЮЛЕРПНБ. мЮ ЙЮФДНЛ НАНПНРЕ ЖХЙКЮ НМЮ БНГБПЮЫЮЕР НДХМ ЯХЛБНК, ОПЕДЯРЮБКЪЧЫХИ ЯКЕДСЧЫСЧ АСЙБС ОЮПЮЛЕРПЮ, ЙНРНПСЧ НАМЮПСФХКЮ, ХКХ `?', ЕЯКХ НАМЮПСФХКЮ МЕОПЮБХКЭМШИ ОЮПЮЛЕРП. йНЦДЮ НМЮ БНГБПЮЫЮЕР \Gamma 1, ЩРН ГМЮВХР, ВРН Б ЙНЛЮМДМНИ ЯРПНЙЕ АНКЭЬЕ МЕР ОЮПЮЛЕРПНБ. оПХ ХЯОНКЭГНБЮМХХ getopt ОЮПЮЛЕРПШ, С ЙНРНПШУ МЕР ЮПЦСЛЕМРНБ, ЛНЦСР АШРЭ ЯЦПСООХПНБЮМШ БЛЕЯРЕ. дКЪ ОЮПЮЛЕРПНБ, ЙНРНПШЕ ЛНЦСР ХЛЕРЭ ЮПЦСЛЕМРШ, РПЕАСЕРЯЪ ОПХЯСРЯРБХЕ ЮПЦСЛЕМРНБ. юПЦСЛЕМРШ ЛНЦСР МЕОНЯПЕДЯРБЕММН ЯКЕДНБЮРЭ ГЮ АСЙБНИ ОЮПЮЛЕРПЮ ХКХ ЛНЦСР АШРЭ НРДЕКЭМШЛХ ЮПЦСЛЕМРЮЛХ ЙНЛЮМДМНИ ЯРПНЙХ. оСЯРЭ МЕЙЮЪ ЦХОНРЕРХВЕЯЙЮЪ ОПНЦПЮЛЛЮ ХЯОНКЭГСЕР РПХ ОЮПЮЛЕРПЮ ЙНЛЮМДМНИ ЯРПНЙХ, `-a', `-b' Х `-c', Х `-b' РПЕАСЕР НДХМ ЮПЦСЛЕМР. рНЦДЮ ОПЮБХКЭМШЛХ АСДСР БЯЕ ЯКЕДСЧЫХЕ ЯОНЯНАЮ ГЮОСЯЙЮ ЩРНИ ОПНЦПЮЛЛШ: prog -a -b foo -c data1 data2 data3 prog -ac -bfoo -- data1 data2 data3 prog -acbfoo data1 data2 data3 нРЛЕРХЛ, ВРН ЙНЦДЮ ЮПЦСЛЕМР ЯЦПСООХПНБЮМ ЯН ЯБНХЛ ОЮПЮЛЕРПНЛ, НЯРЮКЭМШЕ ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ ПЮЯЯЛЮРПХБЮЧРЯЪ ЙЮЙ ЮПЦСЛЕМРШ ЩРНЦН ОЮПЮЛЕРПЮ. б ОПЕДШДСЫЕЛ ОПХЛЕПЕ `-acbfoo' СЙЮГШБЮЕР, ВРН ОПХБЕДЕМШ БЯЕ ОЮПЮЛЕРПШ `-a', `-b', Х `-c', Х ВРН `foo' ЕЯРЭ ЮПЦСЛЕМР ОЮПЮЛЕРПЮ `-b'. getoptДЮЕР ВЕРШПЕ БМЕЬМХУ ОЕПЕЛЕММШУ, ЙНРНПШЕ ОПНЦПЮЛЛХЯР ЛНФЕР ХЯОНКЭГНБЮРЭ: optindхМДЕЙЯ Б ЛЮЯЯХБЕ ГМЮВЕМХИ ЮПЦСЛЕМРНБ argv, ОНЙЮГШБЮЧЫХИ ЦДЕ МЮИРХ ОЕПБШИ, МЕ ЪБКЪЧЫХИЯЪ ОЮПЮЛЕРПНЛ ЮПЦСЛЕМР ЙНЛЮМДМНИ ЯРПНЙХ. optargяРПНЙНБНЕ ГМЮВЕМХЕ ЮПЦСЛЕМРЮ ОЮПЮЛЕРПЮ. opterrнАШВМН getopt ОЕВЮРЮЕР ЯННАЫЕМХЕ НА НЬХАЙЕ, ЙНЦДЮ МЮУНДХР МЕБЕПМШИ ОЮПЮЛЕРП. оПХЯБЮХБЮМХЕ МСКЪ ОЕПЕЛЕММНИ opterr БШЙКЧВЮЕР ЩРН ЯБНИЯРБН. (оПХЙКЮДМЮЪ ОПНЦПЮЛЛЮ ЛНФЕР ГЮУНРЕРЭ МЮОЕВЮРЮРЭ ЯБНЕ ЯНАЯРБЕММНЕ ЯННАЫЕМХЕ.) optoptаСЙБЮ, ОПЕДЯРЮБКЪЧЫЮЪ ОЮПЮЛЕРП ЙНЛЮМДМНИ ЯРПНЙХ. уНРЪ ЩРН НАШВМН МЕ ДНЙСЛЕМРХПНБЮМН, АНКЭЬХМЯРБН БЕПЯХИ НАКЮДЮЧР ЩРНИ ОЕПЕЛЕММНИ. яКЕДСЧЫХИ ТПЮЦЛЕМР МЮ яХ ОНЙЮГШБЮЕР, ЙЮЙ getopt ЛНФЕР НАПЮАЮРШБЮРЭ ЮПЦСЛЕМРШ ЙНЛЮМДМНИ ЯРПНЙХ ДКЪ awk. int main(int argc, char *argv[]) - ... /* print our own message */ opterr = 0; while ((c = getopt(argc, argv, "v:f:F:W:")) != -1) - switch (c) - case 'f': /* file */ ... break; case 'F': /* field separator */ ... break; case 'v': /* variable assignment */ ... break; case 'W': /* extension */ ... break; case '?': default: usage(); break; "" "" ... "" оНОСРМН gawk ТЮЙРХВЕЯЙХ ХЯОНКЭГСЕР ТСМЙЖХЧ GNU getopt.long ДКЪ НАПЮАНРЙХ НАШВМШУ Х ДКХММШУ, Б ЯРХКЕ GNU, ОЮПЮЛЕРПНБ (ЯЛ. ПЮГДЕК 14.1 [оЮПЮЛЕРПШ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП. 161). юАЯРПЮЙЖХЪ, ЙНРНПСЧ НАЕЯОЕВХБЮЕР getopt, НВЕМЭ ОНКЕГМЮ, НМЮ РЮЙФЕ ЛНФЕР НВЕМЭ ОНЛНВЭ Б awk-ОПНЦПЮЛЛЮУ. оПХБЕДЕЛ awk-БЕПЯХЧ ДКЪ getopt. щРЮ ТСМЙЖХЪ ОНДВЕПЙХБЮЕР НДМС ХГ ЦКЮБМШУ ЯКЮАНЯРЕИ awk--- РПСДМНЯРЭ ЛЮМХОСКЪЖХИ Я НРДЕКЭМШЛХ ЯХЛБНКЮЛХ. дКЪ ОНКСВЕМХЪ НРДЕКЭМШУ ЯХЛБНКНБ МЕНАУНДХЛН ОНБРНПЪРЭ БШГНБШ substr (ЯЛ. ПЮГДЕК 12.3 [бЯРПНЕММШЕ ТСМЙЖХХ ДКЪ ЛЮМХОСКЪЖХИ Я ЖЕОНВЙЮЛХ], ЯРП. 137). дХЯЙСЯЯХХ НА ЩРНЛ ГЮМЪКХ ДНБНКЭМН ЛМНЦН БПЕЛЕМХ. # getopt --- ОПЕДЯРЮБКЪЕР Б awk ТСМЙЖХЧ getopt(3) ХГ АХАКХНРЕЙХ яХ # # arnold@gnu.org # Public domain # # Initial version: March, 1991 # Revised: May, 1993 # External variables: # Optind -- ХМДЕЙЯ Б ARGV ДКЪ ОЕПБНЦН ЮПЦСЛЕМРЮ МЕ ОЮПЮЛЕРПЮ # Optarg -- ЖЕОНВЙЮ ГМЮВЕМХЪ ЮПЦСЛЕМРЮ РЕЙСЫЕЦН ОЮПЮЛЕРПЮ # Opterr -- ЕЯКХ МЕ МНКЭ, РН ОЕВЮРЮРЭ МЮЬС ЯНАЯРБЕММСЧ ДХЮЦМНЯРХЙС # Optopt -- РЕЙСЫЮЪ АСЙБЮ ОЮПЮЛЕРПЮ # бНГБПЮЫЮЕР # -1 Б ЙНМЖЕ ОЮПЮЛЕРПНБ # ? ДКЪ МЕНОНГМЮММШУ ОЮПЮЛЕРПНБ # !c? ЯХЛБНК, ОПЕДЯРЮБКЪЧЫХИ РЕЙСЫХИ ОЮПЮЛЕРП # Private Data # .opti ХМДЕЙЯ Б ЛМНЦН ТКЮФЙНБШУ ОЮПЮЛЕРПЮУ, МЮОПХЛЕП, Б -abc тСМЙЖХЪ МЮВХМЮЕРЯЪ Я ДНЙСЛЕМРЮЖХХ: ЙРН МЮОХЯЮК ЙНД, ЙНЦДЮ НМ ОЕПЕЯЛЮРПХБЮКЯЪ, ГЮРЕЛ ХДЕР ЯОХЯНЙ ХЯОНКЭГСЕЛШУ ЦКНАЮКЭМШУ ОЕПЕЛЕММШУ, ЙЮЙХЕ ГМЮВЕМХЪ БШДЮЧРЯЪ Х ВРН НМХ НГМЮВЮЧР, Х БЯЕ ЦКНАЮКЭМШЕ ОЕПЕЛЕММШЕ, ЙНРНПШЕ ЪБКЪЧРЯЪ "private" ДКЪ ЩРНИ АХАКХНРЕВМНИ ТСМЙЖХХ. рЮЙЮЪ ДНЙСЛЕМРЮЖХЪ БЮФМЮ ДКЪ КЧАНИ ОПНЦПЮЛЛШ Х НЯНАЕММН ДКЪ АХАКХНРЕВМШУ ТСМЙЖХИ. function getopt(argc, argv, options, optl, thisopt, i) - optl = length(options) if (optl == 0) # ОПХ НРЯСРЯРБХХ ОЮПЮЛЕРПНБ return -1 if (argv[Optind] == "--") - # БЯЕ ОПНДЕКЮМН Optind++ .opti = 0 return -1 "" else if (argv[Optind] !~ /^-[^: "t"n"f"r"v"b]/) - .opti = 0 return -1 "" тСМЙЖХЪ ЯМЮВЮКЮ ОПНБЕПЪЕР, ВРН НМЮ ДЕИЯРБХРЕКЭМН БШГБЮМЮ Я ЖЕОНВЙНИ ОЮПЮЛЕРПНБ (ЮПЦСЛЕМР options). еЯКХ options ХЛЕЕР ДКХМС 0, getopt ЯПЮГС ФЕ БНГБПЮЫЮЕР \Gamma 1. хДЕР ОПНБЕПЙЮ МЮ ЙНМЕЖ options. жЕОНВЙЮ `--' НГМЮВЮЕР ЙНМЕЖ ОЮПЮЛЕРПНБ Б ЙНЛЮМДМНИ ЯРПНЙЕ, РЮЙ ФЕ ЙЮЙ КЧАНИ ЮПЦСЛЕМР ЙНЛЮМДМНИ ЯРПНЙХ, МЕ МЮВХМЮЧЫХИЯЪ Я `-'. Optind ХЯОНКЭГСЕРЯЪ ДКЪ ОПНДБХФЕМХЪ ОН ЛЮЯЯХБС ЮПЦСЛЕМРНБ ЙНЛЮМДМНИ ЯРПНЙХ; НМ ЯНУПЮМЪЕР ЯБНЕ ГМЮВЕМХЕ БН БЯЕУ НАПЮЫЕМХЪУ Й getopt, ОНЯЙНКЭЙС ЪБКЪЕРЯЪ ЦКНАЮКЭМНИ ОЕПЕЛЕММНИ. хЯОНКЭГСЕЛНЕ ПЕЦСКЪПМНЕ БШПЮФЕМХЕ /^-[^: "t"n"f"r"v"b]/ , ОН-БХДХЛНЛС, МЕЯЙНКЭЙН ХГАШРНВМН; НМН ХЫЕР `-', ГЮ ЙНРНПШЛХ ЯКЕДСЕР ВРН-РН, НРКХВМНЕ НР whitespace ХКХ ДБНЕРНВХЪ. еЯКХ РЕЙСЫХИ ЮПЦСЛЕМР ЙНЛЮМДМНИ ЯРПНЙХ МЕ ЯННРБЕРЯРБСЕР ЩРНЛС НАПЮГЖС, НМ МЕ ОЮПЮЛЕРП Х ОПЕЙПЮЫЮЕР НАПЮАНРЙС ОЮПЮЛЕРПНБ. if (.opti == 0) .opti = 2 thisopt = substr(argv[Optind], .opti, 1) Optopt = thisopt i = index(options, thisopt) if (i == 0) - if (Opterr) printf("%c -- invalid option"n", thisopt) ? "/dev/stderr" if (.opti ?= length(argv[Optind])) - Optind++ .opti = 0 "" else .opti++ return "?" "" оЕПЕЛЕММЮЪ opti ЯКЕДХР ГЮ ОНГХЖХЕИ Б РЕЙСЫЕЛ ЮПЦСЛЕМРЕ ЙНЛЮМДМНИ ЯРПНЙХ (argv[Optind]). б ЯКСВЮЕ, ЙНЦДЮ МЕЯЙНКЭЙН ОЮПЮЛЕРПНБ ЯНАПЮМШ БЛЕЯРЕ Я НДМХЛ `-' (МЮОПХЛЕП, `-abx'), МЕНАУНДХЛН ОЕПЕДЮРЭ ХУ ОНКЭГНБЮРЕКЪ ОН НДМНЛС ГЮ ПЮГ. еЯКХ .opti ПЮБМН МСКЧ, НМН ОНКСВЮЕР ГМЮВЕМХЕ ДБЮ, ХМДЕЙЯ ЯКЕДСЧЫЕЦН ЯХЛБНКЮ Б ЖЕОНВЙЕ ДКЪ ОПНЯЛНРПЮ (ЛШ ОПНОСЯЙЮЕЛ `-', ЯРНЪЫХИ Б ОНГХЖХХ НДХМ). оЕПЕЛЕММЮЪ thisopt ЯНДЕПФХР ЯХЛБНК, ОНКСВЕММШИ ХГ ЖЕОНВЙХ. нМ ЯНУПЮМЪЕРЯЪ Б Optopt ДКЪ ХЯОНКЭГНБЮМХЪ Б ЦКЮБМНИ ОПНЦПЮЛЛЕ. еЯКХ thisopt НРЯСРЯРБСЕР Б ЖЕОНВЙЕ ОЮПЮЛЕРПНБ, РН ЩРН НЬХАНВМШИ ОЮПЮЛЕРП. еЯКХ Opterr МЕ МНКЭ, getopt ОЕВЮРЮЕР ЯННАЫЕМХЕ НА НЬХАЙЕ Б ЯРЮМДЮПРМНЛ БШУНДЕ ДКЪ ЯННАЫЕМХИ НА НЬХАЙЮУ, ОНДНАМН ЯННАЫЕМХЪЛ Б яХ-БЕПЯХХ getopt. оНЯЙНКЭЙС ОЮПЮЛЕРП МЕБЕПЕМ, ЕЦН МЕНАУНДХЛН ОПНОСЯРХРЭ Х ДБХЦЮРЭЯЪ Й ЯКЕДСЧЫЕЛС ЯХЛБНКС ОЮПЮЛЕРПЮ. еЯКХ .opti АНКЭЬЕ ХКХ ПЮБМЮ ДКХМЕ РЕЙСЫЕЦН ЮПЦСЛЕМРЮ ЙНЛЮМДМНИ ЯРПНЙХ, РН МЕНАУНДХЛН ОЕПЕИРХ Й ЯКЕДСЧЫЕЛС, Х Optind СБЕКХВХБЮЕРЯЪ, Ю .opti ЯАПЮЯШБЮЕРЯЪ Б 0. б ОПНРХБМНЛ ЯКСВЮЕ Optind НЯРЮЕРЯЪ АЕГ ХГЛЕМЕМХЪ, Ю СБЕКХВХБЮЕРЯЪ РНКЭЙН .opti б КЧАНЛ ЯКСВЮЕ, ЙНЦДЮ ОЮПЮЛЕРП НЬХАНВЕМ, getopt БНГБПЮЫЮЕР `?'. цКЮБМЮЪ ОПНЦПЮЛЛЮ ЛНФЕР ХЯЯКЕДНБЮРЭ Optopt, ЕЯКХ УНВЕР СГМЮРЭ, ЙЮЙНИ АСЙБНИ НЙЮГЮКЯЪ МЕБЕПМШИ ОЮПЮЛЕРП. if (substr(options, i + 1, 1) == ":") - # БШДЮЕР ЮПЦСЛЕМР ОЮПЮЛЕРПЮ if (length(substr(argv[Optind], .opti + 1)) ? 0) Optarg = substr(argv[Optind], .opti + 1) else Optarg = argv[++Optind] .opti = 0 "" else Optarg = "" еЯКХ ОЮПЮЛЕРП РПЕАСЕР ЮПЦСЛЕМР, ГЮ АСЙБНИ ОЮПЮЛЕРПЮ Б ЖЕОНВЙЕ ОЮПЮЛЕРПНБ ЯКЕДСЕР ДБНЕРНВХЕ. еЯКХ Б РЕЙСЫЕЛ ЮПЦСЛЕМРЕ ЙНЛЮМДНИ ЯРПНЙХ (argv[Optind]) НЯРЮЧРЯЪ ЕЫЕ ЯХЛБНКШ, РН НЯРЮРНЙ ЖЕОНВЙХ ОПХЯБЮХБЮЕРЯЪ ОЕПЕЛЕММНИ Optarg. б ОПНРХБМНЛ ЯКСВЮЕ ХЯОНКЭГСЕРЯЪ ЯКЕДСЧЫХИ ЮПЦСЛЕМР ЙНЛЮМДМНИ ЯРПНЙХ (`-xFOO' ХКХ `-x FOO'). б КЧАНЛ ЯКСВЮЕ .opti ЯАПЮЯШБЮЕРЯЪ Б 0, РЮЙ ЙЮЙ АНКЭЬЕ МЕ НЯРЮЕРЯЪ ЯХЛБНКНБ ДКЪ ХЯЯКЕДНБЮМХЪ Б РЕЙСЫЕЛ ЮПЦСЛЕМРЕ ЙНЛЮМДМНИ ЯРПНЙХ. if (.opti == 0 ---- .opti ?= length(argv[Optind])) - Optind++ .opti = 0 "" else .opti++ return thisopt "" мЮЙНМЕЖ, ЕЯКХ .opti ХКХ МНКЭ ХКХ АНКЭЬЕ ВЕЛ ДКХМЮ РЕЙСЫЕЦН ЮПЦСЛЕМРЮ ЙНЛЮМДМНИ ЯРПНЙХ, РН ЩРН ГМЮВХР, ВРН ЩРНР ЩКЕЛЕМР Б argv ОНКМНЯРЭЧ ХЯЯКЕДНБЮМ, ОНЩРНЛС Optind СБЕКХВХБЮЕРЯЪ ДКЪ СЙЮГЮМХЪ МЮ ЯКЕДСЧЫХИ Б argv. еЯКХ МХ НДМН СЯКНБХЕ МЕ ХЛЕЕР ГМЮВЕМХЪ true, РН ОПНДБХЦЮЕРЯЪ РНКЭЙН .opti, РЮЙ ВРН ЯКЕДСЧЫЮЪ АСЙБЮ-ОЮПЮЛЕРП ЛНФЕР НАПЮАЮРШБЮРЭЯЪ ЯКЕДСЧЫХЛ БШГНБНЛ getopt. BEGIN - Opterr = 1 # default is to diagnose Optind = 1 # skip ARGV[0] # test program if (.getopt.test) - while ((.go.c = getopt(ARGC, ARGV, "ab:cd")) != -1) printf("c = !%c?, optarg = !%s?"n", .go.c, Optarg) printf("non-option arguments:"n") for (; Optind ! ARGC; Optind++) printf(""tARGV[%d] = !%s?"n", Optind, ARGV[Optind]) "" "" оПЮБХКН BEGIN ХМХЖХЮКХГХПСЕР ЕДХМХЖЕИ НАЕ Opterr Х Optind. Opterr СЯРЮМЮБКХБЮЕРЯЪ Б ЕДХМХЖС, ОНЯЙНКЭЙС ОН СЛНКВЮМХЧ ОНБЕДЕМХЕ getopt ЕЯРЭ ОЕВЮРЭ ДХЮЦМНЯРХВЕЯЙХУ ЯННАЫЕМХИ ОПХ НАМЮПСФЕМХХ МЕБЕПМШУ ОЮПЮЛЕРПНБ. Optind СЯРЮМЮБКХБЮЕРЯЪ Б ЕДХМХЖС, ОНЯЙНКЭЙС МЕР ОПХВХМ ЯЛНРПЕРЭ МЮ ХЛЪ ОПНЦПЮЛЛШ, ЙНРНПНЕ МЮУНДХРЯЪ Б ARGV[0]. нЯРЮКЭМЮЪ ВЮЯРЭ BEGIN ЕЯРЭ ОПНЯРН РЕЯР ОПНЦПЮЛЛШ. оПХБЕДЕЛ ДБЮ ОПХЛЕПЮ ОПНОСЯЙЮ РЕЯРНБШУ ОПНЦПЮЛЛ. $ awk -f getopt.awk -v .getopt.test=1 -- -a -cbARG bax -x a c = !a?, optarg = !? a c = !c?, optarg = !? a c = !b?, optarg = !ARG? a non-option arguments: a ARGV[3] = !bax? a ARGV[4] = !-x? $ awk -f getopt.awk -v .getopt.test=1 -- -a -x -- xyz abc a c = !a?, optarg = !? error x -- invalid option a c = !??, optarg = !? a non-option arguments: a ARGV[4] = !xyz? a ARGV[5] = !abc? оЕПБНЕ `--' ГЮЙЮМВХБЮЕР ЮПЦСЛЕМРШ awk, РЮЙ ВРН ЩРН МЕ ОНОШРЙЮ ПЮЯЯЛЮРПХБЮРЭ `-a' Х ЯКЕДСЧЫХЕ ЙЮЙ ЕЕ ЯНАЯРБЕММШЕ ОЮПЮЛЕРПШ. мЕЯЙНКЭЙН ОПХЛЕПНБ ОПНЦПЮЛЛ, ОПЕДЯРЮБКЕММШУ Б цКЮБЕ 16 [оПЮЙРХВЕЯЙХЕ awk-ОПНЦПЮЛЛШ], ЯРП. 205, ХЯОНКЭГСЧР getopt ДКЪ НАПЮАНРЙХ ЯБНХУ ЮПЦСЛЕМРНБ. 15.11 вРЕМХЕ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУяОЕЖХЮКЭМШИ ТЮИК `/dev/user' (ЯЛ. ПЮГДЕК 6.7 [яОЕЖХЮКЭМШЕ ХЛЕМЮ ТЮИКНБ Б gawk], ЯРП. 72) НАЕЯОЕВХБЮЕР ДНЯРСО Й РЕЙСЫЕЛС ОНКЭГНБЮРЕКЭЯЙНЛС ПЕЮКЭМНЛС Х ЩТТЕЙРХБМНЛС ОНКЭГНБЮРЕКЭЯЙНЛС Х ЦПСООНБНЛС ХДЕМРХТХЙЮЖХНММШЛ МНЛЕПЮЛ Х, ЕЯКХ ЕЯРЭ, Й ДНОНКМХРЕКЭМНЛС МНЛЕПС ОНКЭГНБЮРЕКЭЯЙНЦН ЦПСООНБНЦН ЛМНФЕЯРБЮ. нДМЮЙН, ОНЯЙНКЭЙС ЩРН МНЛЕПЮ, НМХ МЕ ЯНДЕПФЮР НВЕМЭ ОНКЕГМНИ ДКЪ НАШВМНЦН ОНКЭГНБЮРЕКЪ ХМТНПЛЮЖХХ. уНРЕКНЯЭ АШ МЮИРХ МЕЙНРНПШИ ОСРЭ Й ХМТНПЛЮЖХХ ОНКЭГНБЮРЕКЪ, ЯБЪГЮММНИ Я ОНКЭГНБЮРЕКЕЛ Х Я МНЛЕПЮЛХ ЦПСОО. щРНР ПЮГДЕК ОПЕДКЮЦЮЕР ЙНЛОКЕЙР ТСМЙЖХИ ДКЪ ОНХЯЙЮ ХМТНПЛЮЖХХ Б ОНКЭГНБЮРЕКЭЯЙХУ АЮГЮУ ДЮММШУ. яЛ. ПЮГДЕК 15.12 [вРЕМХЕ ЦПСООНБНИ АЮГШ ДЮММШУ], ЯРП. 197, Н ОНДНАМНЛ ЙНЛОКЕЙРЕ, ЙНРНПШИ БШДЮЕР ХМТНПЛЮЖХЧ ХГ ЦПСООНБШУ АЮГ ДЮММШУ. яРЮМДЮПР POSIX МЕ НОПЕДЕКЪЕР ТЮИК, ЦДЕ ОНКЭГНБЮРЕКЭ ДЕПФХР ХМТНПЛЮЖХЧ. бЛЕЯРН ЩРНЦН НМ НАЕЯОЕВХБЮЕР ГЮЦНКНБНВМШИ ТЮИК !pwd.h? Х МЕЯЙНКЭЙН ОНДОПНЦПЮЛЛ МЮ ЪГШЙЕ яХ ДКЪ ОНКСВЕМХЪ ОНКЭГНБЮРЕКЭЯЙНИ ХМТНПЛЮЖХХ. оЕПБХВМЮЪ ТСМЙЖХЪ ЕЯРЭ getpwent ( ЯНЙПЮЫЕМХЕ НР "get password entry", Р.Е. СГМЮРЭ ОЮПНКЭ). оЮПНКЭ ОНКСВЮЧР ХГ НПХЦХМЮКЭМНЦН ТЮИКЮ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ, /etc/passwd', ЙНРНПШИ ЯНДЕПФХР ХМТНПЛЮЖХЧ ОНКЭГНБЮРЕКЪ БЛЕЯРЕ Я ГЮЬХТПНБЮММШЛХ ОЮПНКЪЛХ (НРЯЧДЮ Х ХЛЪ ТЮИКЮ). оНЯЙНКЭЙС awk-ОПНЦПЮЛЛШ ЛНЦСР МЕОНЯПЕДЯРБЕММН ВХРЮРЭ `/etc/passwd' (ТНПЛЮР УНПНЬН ХГБЕЯРЕМ),РН ХГ-ГЮ ЯОНЯНАЮ, ЙНРНПШЛ ТЮИКШ Я ОЮПНКЪЛХ НАПЮАЮРШБЮЧРЯЪ Б ЯЕРЕБШУ ЯХЯРЕЛЮУ, ЩРНР ТЮИК МЕ ЛНФЕР ЯНДЕПФЮРЭ ОНКМНИ ХМТНПЛЮЖХХ Н ЯХЯРЕЛМНЛ ЛМНФЕЯРБЕ ОНКЭГНБЮРЕКЕИ. вРНАШ АШРЭ Б ЯНЯРНЪМХХ ОПНХГБЕЯРХ ВХРЮЕЛСЧ, ОНКМСЧ БЕПЯХЧ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ, МЕНАУНДХЛН МЮОХЯЮРЭ ЛЮКЕМЭЙСЧ CХ-ОПНЦПЮЛЛС, ЙНРНПЮЪ БШГШБЮЕР getpwent. getpwent НОПЕДЕКЕМЮ ДКЪ БНГБПЮЫЕМХЪ СЙЮГЮРЕКЪ Й ЯРПСЙРСПЕ passwd. оПХ ЙЮФДНЛ БШГНБЕ НМЮ БНГБПЮЫЮЕР ЯКЕДСЧЫХИ БУНД Б АЮГС ДЮММШУ. еЯКХ БУНДНБ АНКЭЬЕ МЕР, НМЮ БНГБПЮЫЮЕР NULL, МСКЕБНИ СЙЮГЮРЕКЭ. йНЦДЮ ЩРН ОПНХЯУНДХР, CХ-ОПНЦПЮЛЛЮ ДНКФМЮ БШГШБЮРЭ endpwent ДКЪ ГЮЙПШРХЪ АЮГШ ДЮММШУ. оПХБЕДЕЛ pwcat, яХ-ОПНЦПЮЛЛС, ЙНРНПЮЪ "ГЮЙНЬЮВХБЮЕР" (cats) АЮГС ДЮММШУ Я ОЮПНКЕЛ. /* * pwcat.c * * цЕМЕПХПСЕР ОЕВЮРМСЧ БЕПЯХЧ АЮГШ ДЮММШУ Я ОЮПНКЕЛ * * Arnold Robbins * arnold@gnu.org * May 1993 * Public Domain */ #include !stdio.h? #include !pwd.h? int main(argc, argv) int argc; char **argv; - struct passwd *p; while ((p = getpwent()) != NULL) printf("%s:%s:%d:%d:%s:%s:%s"n", p-?pw.name, p-?pw.passwd, p-?pw.uid, p-?pw.gid, p-?pw.gecos, p-?pw.dir, p-?pw.shell); endpwent(); exit(0); "" еЯКХ БШ МЕ ОНМХЛЮЕРЕ яХ, МЕ АЕЯОНЙНИРЕЯЭ. бШУНД НР pwcat ЕЯРЭ ОНКЭГНБЮРЕКЭЯЙЮЪ АЮГЮ ДЮММШУ Б РПЮДХЖХНММНЛ ТНПЛЮРЕ `/etc/passwd' ПЮГДЕКЕММШУ ДБНЕРНВХЪЛХ ОНКЕИ. оНКЪ РЮЙХЕ: Login nameоНКЭГНБЮРЕКЭЯЙНЕ login name. гЮЬХТПНБЮММШИ ОЮПНКЭ оНКЭГНБЮРЕКЭЯЙХИ ГЮЬХТПНБЮММШИ ОЮПНКЭ . нМ ЛНФЕР АШРЭ МЕДНЯРСОЕМ МЮ МЕЙНРНПШУ ЯХЯРЕЛЮУ. User-IDоНКЭГНБЮРЕКЭЯЙХИ ХДЕМРХТХЙЮЖХНММШИ МНЛЕП. Group-IDвХЯКНБНИ ХДЕМРХТЙЮРНП ЦПСООШ ОНКЭГНБЮРЕКЕИ. Full nameоНКМНЕ ХЛЪ ОНКЭГНБЮРЕКЪ ,БНГЛНФМН, Х ДПСЦЮЪ ХМТНПЛЮЖХЪ, ЯБЪГЮММЮЪ Я МХЛ. МЮВЮКЭМШИ ЙЮРЮКНЦмЮВЮКЭМШИ ХКХ БУНДМНИ ЙЮРЮКНЦ ОНКЭГНБЮРЕКЪ ($HOME ОН РЕПЛХМНКНЦХХ ЯХЯРЕЛМШУ ОПНЦПЮЛЛХЯРНБ). Login shellоПНЦПЮЛЛЮ, ЙНРНПЮЪ БШОНКМЪЕРЯЪ ОПХ БУНДЕ ОНКЭГНБЮРЕКЪ Б ЯХЯРЕЛС. нАШВМН ЩРН НАНКНВЙЮ, РЮЙЮЪ ЙЮЙ Bash (НАНКНВЙЮ Gnu Bourne-Again). оПХБЕДЕЛ МЕЯЙНКЭЙН ЯРПНЙ, ОПЕДЯРЮБКЪЧЫХУ БШУНД pwcat. $ pwcat a root:3Ov02d5VaUPB6:0:1:Operator:/:/bin/sh a nobody:*:65534:65534::/: a daemon:*:1:1::/: a sys:*:2:2::/:/bin/csh a bin:*:3:3::/bin: a arnold:xyzzy:2076:10:Arnold Robbins:/home/arnold:/bin/sh a miriam:yxaay:112:10:Miriam Robbins:/home/miriam:/bin/sh a andy:abcca2:113:10:Andy Jacobs:/home/andy:/bin/sh ... оНЯКЕ ЩРНЦН ББЕДЕМХЪ СЙЮФЕЛ ЦПСООС ТСМЙЖХИ ДКЪ ОНКСВЕМХЪ ХМТНПЛЮЖХХ ОНКЭГНБЮРЕКЪ. гДЕЯЭ ХЛЕЧРЯЪ МЕЯЙНКЭЙН ТСМЙЖХИ, ЯННРБЕРЯРБСЧЫХУ ТСМЙЖХЪЛ Б яХ Я РЮЙХЛХ ФЕ ХЛЕМЮЛХ. # passwd.awk --- ДНЯРСО Й ХМТНПЛЮЖХХ Б ТЮИКЕ password # Arnold Robbins, arnold@gnu.org, Public Domain # May 1993 BEGIN - # ОПХЯОНЯНАЭРЕ ЩРН ДКЪ ЯБНЕИ ЯХЯРЕЛШ .pw.awklib = "/usr/local/libexec/awk/" "" function .pw.init( oldfs, oldrs, olddol0, pwcat) - if (.pw.inited) return oldfs = FS oldrs = RS olddol0 = $0 FS = ":" RS = ""n" pwcat = .pw.awklib "pwcat" while ((pwcat -- getline) ? 0) - .pw.byname[$1] = $0 .pw.byuid[$3] = $0 .pw.bycount[++.pw.total] = $0 "" close(pwcat) .pw.count = 0 .pw.inited = 1 FS = oldfs RS = oldrs $0 = olddol0 "" оПЮБХКН BEGIN СЯРЮМЮБКХБЮЕР ВЮЯРМСЧ ОЕПЕЛЕММСЧ МЮ ЙЮРЮКНЦ, ЦДЕ УПЮМХРЯЪ pwcat. оНЯЙНКЭЙС НМЮ ХЯОНКЭГСЕРЯЪ ДКЪ ОНЛНЫХ Б ХГБКЕВЕМХХ АХАКХНРЕВМНИ ОНДОПНЦПЮЛЛШ awk, ЛШ ПЕЬХКХ ОНКНФХРЭ ЕЕ Б `/usr/local/libexec/awk'. бШ ЛНФЕРЕ ДЕПФЮРЭ ЕЕ Б ДПСЦНЛ ЙЮРЮКНЦЕ Б БЮЬЕИ ЯХЯРЕЛЕ. тСМЙЖХЪ .pw.init УПЮМХР РПХ ЙНОХХ ХМТНПЛЮЖХХ Н ОНКЭГНБЮРЕКЪУ Б РПЕУ ЮЯЯНЖХЮРХБМШУ ЛЮЯЯХБЮУ. лЮЯЯХБШ ХМДЕЙЯХПСЧРЯЪ ОН ХЛЕМХ ОНКЭГНБЮРЕКЕИ (.pw.byname), ОН ХДЕМРХТХЙЮЖХНММНЛС МНЛЕПС ОНКЭГНБЮРЕКЕИ (.pw.byuid), Х ОН ОНПЪДЙС ПЮЯОНКНФЕМХЪ (.pw.bycount). оЕПЕЛЕММЮЪ .pw.inited ХЯОНКЭГСЕРЯЪ ДКЪ ЩТТЕЙРХБМНЯРХ; .pw.init МСФМН БШГШБЮРЭ РНКЭЙН НДХМ ПЮГ. рЮЙ ЙЮЙ ЩРЮ ТСМЙЖХЪ ХЯОНКЭГСЕР getline ДКЪ ВРЕМХЪ ХМТНПЛЮЖХХ ХГ pwcat, НМЮ ЯМЮВЮКЮ ГЮОНЛХМЮЕР ГМЮВЕМХЪ FS, RS Х $0. щРН ДЕКЮРЭ МЕНАУНДХЛН, ОНЯЙНКЭЙС ЩРХ ТСМЙЖХХ ЛНЦСР БШГШБЮРЭЯЪ ХГ КЧАНЦН ЛЕЯРЮ ОПНЦПЮЛЛШ ОНКЭГНБЮРЕКЪ, Х ОНКЭГНБЮРЕКЭ ЛНФЕР ХЛЕРЭ ЯБНХ ЯНАЯРБЕММШЕ ГМЮВЕМХЪ ДКЪ FS Х RS. цКЮБМЮЪ ВЮЯРЭ ТСМЙЖХХ ХЯОНКЭГСЕР ЖХЙК ДКЪ ВРЕМХЪ ЯРПНЙ АЮГШ ДЮММШУ, ПЮГДЕКЕМХЪ ХУ МЮ ОНКЪ Х ГЮРЕЛ ОПХ МЕНАУНДХЛНЯРХ ГЮОНЛХМЮЕР ЯРПНЙХ Б ЙЮФДНЛ ЛЮЯЯХБЕ. йНЦДЮ ЖХЙК ГЮЙНМВЕМ, .pw.init ГЮБЕПЬЮЕР ПЮАНРС, ГЮЙПШБЮЪ ЙНМБЕИЕП, СЯРЮМЮБКХБЮЪ .pw.inited Б ЕДХМХЖС Х БНЯЯРЮМЮБКХБЮЪ FS, RS Х $0. хЯОНКЭГНБЮМХЕ .pw.count АСДЕР ОНЪЯМЕМН МХФЕ. function getpwnam(name) - .pw.init() if (name in .pw.byname) return .pw.byname[name] return "" "" тСМЙЖХЪ getpwnam ОНКСВЮЕР ХЛЪ ОНКЭГНБЮРЕКЪ Б ЙЮВЕЯРБЕ ЯРПНЙНБНЦН ЮПЦСЛЕМРЮ. еЯКХ ЩРНР ОНКЭГНБЮРЕКЭ МЮУНДХРЯЪ Б АЮГЕ, НМЮ БНГБПЮЫЮЕР ЯННРБЕРЯРБСЧЫСЧ ЯРПНЙС. хМЮВЕ НРБЕРНЛ ЯКСФХР ОСЯРЮЪ ЖЕОНВЙЮ. function getpwuid(uid) - .pw.init() if (uid in .pw.byuid) return .pw.byuid[uid] return "" "" юМЮКНЦХВМН, ТСМЙЖХЪ getpwuid ХЛЕЕР ЮПЦСЛЕМРНЛ ХДЕМРХТХЙЮЖХНММШИ МНЛЕП ОНКЭГНБЮРЕКЪ. еЯКХ ЩРНР МНЛЕП ЕЯРЭ Б АЮГЕ, НМЮ БНГБПЮЫЮЕР ЯННРБЕРЯРБСЧЫСЧ ЯРПНЙС Х ОСЯРСЧ ЖЕОНВЙС Б ОПНРХБМНЛ ЯКСВЮЕ. function getpwent() - .pw.init() if (.pw.count ! .pw.total) return .pw.bycount[++.pw.count] return "" "" тСМЙЖХЪ getpwent ОПНЯРН ОПНЯЛЮРПХБЮЕР АЮГС ДЮММШУ, ОН НДМНЛС БУНДС ГЮ ПЮГ. нМЮ ХЯОНКЭГСЕР .pw.count ДКЪ ЯКЕФЕМХЪ ГЮ ЯБНЕИ РЕЙСЫЕИ ОНГХЖХЕИ Б ЛЮЯЯХБЕ. function endpwent() - .pw.count = 0 "" тСМЙЖХЪ endpwent ЯАПЮЯШБЮЕР .pw.count МЮ МНКЭ, РЮЙ ВРН ОНЯКЕДСЧЫХЕ НАПЮЫЕМХЪ Й getpwent АСДСР НОЪРЭ МЮВХМЮРЭ Я МЮВЮКЮ. оПХ ОПНЕЙРХПНБЮМХХ ЩРНЦН ЙНЛОКЕЙРЮ ТСМЙЖХИ ОПЕДОНКЮЦЮКНЯЭ, ВРН ЙЮФДЮЪ ОНДОПНЦПЮЛЛЮ БШГШБЮЕР .pw.init ДКЪ ХМХЖХЮКХГЮЖХХ ЛЮЯЯХБНБ АЮГШ ДЮММШУ яКСФЕАМШИ НРДЕКЭМШИ ОПНЖЕЯЯ ДКЪ ЦЕМЕПХПНБЮМХЪ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ Х I/O ДКЪ ОПНЯЛНРПЮ ЕЕ РНКЭЙН Х АСДСР НАЪГЮРЕКЭМШ, ЕЯКХ ЦКЮБМЮЪ ОПНЦПЮЛЛЮ ОНКЭГНБЮРЕКЪ ТЮЙРХВЕЯЙХ БШГШБЮЕР НДМС ХГ ЩРХУ ТСМЙЖХИ. еЯКХ ЩРНР АХАКХНРЕВМШИ ТЮИК ГЮЦПСФЕМ БЛЕЯРЕ Я ОНКЭГНБЮРЕКЭЯЙНИ ОПНЦПЮЛЛНИ, МН МХ НДМЮ ХГ ОНДОПНЦПЮЛЛ МХ ПЮГС МЕ БШГШБЮЕРЯЪ, МЕ АСДЕР МХЙЮЙНЦН ДНОНКМХРЕКЭМНЦН ПЮЯУНДЮ ЛЮЬХММНЦН БПЕЛЕМХ. (юКЭРЕПМЮРХБНИ ЛНФЕР АШРЭ ОЕПЕМНЯ РЕКЮ .pw.init Б ОПЮБХКН BEGIN, ЙНРНПНЕ АСДЕР БЯЕЦДЮ БШОНКМЪРЭ pwcat. щРН СОПНЫЮЕР ЙНД, МН ГЮОСЯЙЮЕР ДНОНКМХРЕКЭМШИ ОПНЖЕЯЯ, ЙНРНПШИ ЛНФЕР МХЙНЦДЮ МЕ ОНРПЕАНБЮРЭЯЪ.) б ЯБНЧ НВЕПЕДЭ, БШГНБ pw.init МЕ НВЕМЭ ДНПНЦ, ОНЯЙНКЭЙС ОЕПЕЛЕММЮЪ .pw.inited ОПЕДНУПЮМЪЕР ОПНЦПЮЛЛС НР ВРЕМХЪ ДЮММШУ АНКЕЕ НДМНЦН ПЮГЮ. еЯКХ БШ ГЮХМРЕПЕЯНБЮМШ Б СДЮКЕМХХ ЙЮФДНЦН КХЬМЕЦН ЖХЙКЮ ХГ БЮЬЕИ awk-ОПНЦПЮЛЛШ, РН ОПНБЕПЙЮ .pw.inited ЛНФЕР АШРЭ БШДЕКЕМЮ ХГ .pw.init Х ДСАКХПНБЮМЮ БН БЯЕУ ДПСЦХУ ТСМЙЖХЪУ. оПЮЙРХВЕЯЙХ, ЩРН МЕ МЕНАУНДХЛН, ОНЯЙНКЭЙС АНКЭЬХМЯРБН awk-ОПНЦПЮЛЛ НПХЕМРХПНБЮМШ МЮ ББНД Х БШБНД Х СОНЛЪМСРШЕ ДЕИЯРБХЪ РНКЭЙН ГЮОСРЮЧР ЕЕ ЙНД. оПНЦПЮЛЛЮ id Б ПЮГДЕКЕ 16.1.3 [оЕВЮРЭ ХМТНПЛЮЖХХ Н ОНКЭГНБЮРЕКЪУ], ЯРП.215, ХЯОНКЭГСЕР ЩРХ ТСМЙЖХХ. 15.12 вРЕМХЕ ЦПСООНБШУ АЮГ ДЮММШУаНКЭЬХМЯРБН ПЮЯЯСФДЕМХИ, ОПЕДЯРЮБКЕММШУ Б ПЮГДЕКЕ 15.11 [вРЕМХЕ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ], ЯРП. 192, Б РЮЙНИ ФЕ ЛЕПЕ ОПХКНФХЛШ Х Й ЦПСООНБШЛ АЮГЮЛ ДЮММШУ. уНРЪ РПЮДХЖХНММН ХЯОНКЭГНБЮКЯЪ ХГБЕЯРМШИ ТЮИК, `/etc/group', Б УНПНЬН ХГБЕЯРМНЛ ТНПЛЮРЕ, ЯРЮМДЮПР POSIX ХЛЕЕР РНКЭЙН ЦПСООС ОНДОПНЦПЮЛЛ ХГ АХАКХНРЕЙХ яХ (!grp.h? Х getgrent) ДКЪ ДНЯРСОЮ Й ХМТНПЛЮЖХХ. дЮФЕ ЕЯКХ РЮЙНИ ТЮИК ЯСЫЕЯРБСЕР, НМ БЕПНЪРМН МЕ ЯНДЕПФХР ОНКМНИ ХМТНПЛЮЖХХ. оНЩРНЛС, ЙЮЙ Х Я ОНКЭГНБЮРЕКЭЯЙНИ АЮГНИ ДЮММШУ, МЕНАУНДХЛН ХЛЕРЭ МЕАНКЭЬСЧ яХ-ОПНЦПЮЛЛС, ЙНРНПЮЪ ЦЕМЕПХПСЕР ЦПСООНБСЧ АЮГС ЙЮЙ ЯБНИ БШУНД. оПХБЕДЕЛ grcat, ОПНЦПЮЛЛС ЪГШЙЮ яХ, ЙНРНПЮЪ "НЙНЬЮВХБЮЕР" ("cats") ЦПСООНБСЧ АЮГС ДЮММШУ. /* * grcat.c * * Generate a printable version of the group database * * Arnold Robbins, arnold@gnu.org * May 1993 * Public Domain */ #include !stdio.h? #include !grp.h? int main(argc, argv) int argc; char **argv; - struct group *g; int i; while ((g = getgrent()) != NULL) - printf("%s:%s:%d:", g-?gr.name, g-?gr.passwd, g-?gr.gid); for (i = 0; g-?gr.mem[i] != NULL; i++) - printf("%s", g-?gr.mem[i]); if (g-?gr.mem[i+1] != NULL) putchar(','); "" putchar('"n'); "" endgrent(); exit(0); "" йЮФДЮЪ ЯРПНЙЮ Б ЦПСООНБНИ АЮГЕ ДЮММШУ ОПЕДЯРЮБКЪЕР НДМС ЦПСООС. оНКЪ ПЮГДЕКЕМШ ДБНЕРНВХЪЛХ Х ЯНДЕПФЮР ЯКЕДСЧЫСЧ ХМТНПЛЮЖХЧ. Group NameхЛЪ ЦПСООШ. Group PasswordгЮЬХТПНБЮММШИ ЦПСООНБНИ ОЮПНКЭ. щРН ОНКЕ ОПЮЙРХВЕЯЙХ МХЙНЦДЮ МЕ ХЯОНКЭГСЕРЯЪ. нМН НАШВМН ОСЯРН ХКХ ЯНДЕПФХР `*'. Group ID NumberвХЯКНБНИ ХДЕМРХТХЙЮРНП ЦПСООШ. мНЛЕП ДНКФЕМ АШРЭ СМХЙЮКЭМШ Б ТЮИКЕ. Group Member ListпЮГДЕКЕММШИ ГЮОЪРШЛХ ЯОХЯНЙ ХЛЕМ ОНКЭГНБЮРЕКЕИ. щРХ ОНКЭГНБЮРЕКХ ЪБКЪЧРЯЪ ВКЕМЮЛХ ЦПСООШ. аНКЭЬХМЯРБН ЯХЯРЕЛ Unix ПЮГПЕЬЮЧР ОНКЭГНБЮРЕКЪЛ АШРЭ ВКЕМЮЛХ МЕЯЙНКЭЙХУ ЦПСОО НДМНБПЕЛЕММН. еЯКХ ЩРН БНГЛНФМН Х Б БЮЬЕИ ЯХЯРЕЛЕ, РН ВРЕМХЕ `/dev/user' БНГБПЮРХР ЩРХ ЦПСООНБШЕ МНЛЕПЮ Б $5 ВЕПЕГ $NF. (гЮЛЕРХЛ ВРН `/dev/user' ЕЯРЭ ПЮЯЬХПЕМХЕ gawk; ЯЛ. ПЮГДЕК 6.7 [яОЕЖХЮКЭМШЕ ХЛЕМЮ ТЮИКНБ Б gawk], ЯРП. 72.) мХФЕ ОНЙЮГЮМН, ВРН ЛНФЕР ОПХБЕЯРХ БШОНКМЕМХЕ grcat: $ grcat a wheel:*:0:arnold a nogroup:*:65534: a daemon:*:1: a kmem:*:2: a staff:*:10:arnold,miriam,andy a other:*:20:... бНР ТСМЙЖХХ ДКЪ ОНКСВЕМХЪ ХМТНПЛЮЖХХ ХГ ЦПСООНБНИ АЮГШ. хЛЕЕРЯЪ МЕЯЙНКЭЙН ТСМЙЖХИ, ЛНДЕКХПСЧЫХУ ТСМЙЖХХ Я РЕЛХ ФЕ ХЛЕМЮЛХ ХГ АХАКХНРЕЙХ яХ. # group.awk --- ТСМЙЖХХ ДКЪ ДЕИЯРБХИ Я ЦПСООНБШЛ ТЮИКНЛ # Arnold Robbins, arnold@gnu.org, Public Domain # May 1993 BEGIN " - # ХГЛЕМХРЕ Б ЯННРБЕРЯРБХХ Я БЮЬЕИ ЯХЯРЕЛНИ .gr.awklib = "/usr/local/libexec/awk/" "" function .gr.init( oldfs, oldrs, olddol0, grcat, n, a, i) - if (.gr.inited) return oldfs = FS oldrs = RS olddol0 = $0 FS = ":" RS = ""n" grcat = .gr.awklib "grcat" while ((grcat -- getline) ? 0) - if ($1 in .gr.byname) .gr.byname[$1] = .gr.byname[$1] "," $4 else .gr.byname[$1] = $0 if ($3 in .gr.bygid) .gr.bygid[$3] = .gr.bygid[$3] "," $4 else .gr.bygid[$3] = $0 n = split($4, a, "[ "t]*,[ "t]*") for (i = 1; i != n; i++) if (a[i] in .gr.groupsbyuser) .gr.groupsbyuser[a[i]] = " .gr.groupsbyuser[a[i]] " " $1 else .gr.groupsbyuser[a[i]] = $1 .gr.bycount[++.gr.count] = $0 "" close(grcat) .gr.count = 0 .gr.inited++ FS = oldfs RS = oldrs $0 = olddol0 "" оПЮБХКН BEGIN СЯРЮМЮБКХБЮЕР ВЮЯРМСЧ ОЕПЕЛЕММСЧ МЮ ЙЮРЮКНЦ, ЦДЕ УПЮМХРЯЪ grcat. оНЯЙНКЭЙС НМЮ ХЯОНКЭГСЕРЯЪ ДКЪ ОНЛНЫХ Б ХГБКЕВЕМХХ ОНДОПНЦПЮЛЛШ ХГ awk-АХАКХНРЕЙХ, ЛШ ПЕЬХКХ ОНКНФХРЭ ЕЕ Б`/usr/local/libexec/awk'. бШ ЛНФЕРЕ ПЮГЛЕЯРХРЭ ЕЕ Б ДПСЦНЛ ЙЮРЮКНЦЕ Б БЮЬЕИ ЯХЯРЕЛЕ. щРХ ОНДОПНЦПЮЛЛШ ЯКЕДСЧР РНИ ФЕ ЯЮЛНИ НАЫЕИ ТНПЛЕ, ВРН Х ОНДОПНЦПЮЛЛШ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ (ЯЛ. ПЮГДЕК 15.11 [вРЕМХЕ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ], ЯРП. 192). оЕПЕЛЕММЮЪ .gr.inited ХЯОНКЭГСЕРЯЪ ДКЪ НАЕЯОЕВЕМХЪ ЯЙЮМХПНБЮМХЪ АЮГШ МЕ АНКЕЕ НДМНЦН ПЮГЮ. тСМЙЖХЪ .gr.init ЯМЮВЮКЮ ГЮОНЛХМЮЕР FS, RS Х $0, ГЮРЕЛ СЯРЮМЮБКХБЮЕР Б FS Х RS ОПЮБХКЭМШЕ ГМЮВЕМХЪ ДКЪ ЯЙЮМХПНБЮМХЪ ЦПСООНБНИ ХМТНПЛЮЖХХ. щРЮ ХМТНПЛЮЖХЪ ГЮОХЯШБЮЕРЯЪ Б МЕЯЙНКЭЙН ЮЯЯНЖХЮРХБМШУ ЛЮЯЯХБНБ. лЮЯЯХБШ ХМДЕЙЯХПСЧРЯЪ ЦПСООНБШЛХ ХЛЕМЮЛХ (.gr.byname), ЦПСООНБШЛХ ХДЕМРХТХЙЮЖХНММШЛХ МНЛЕПЮЛХ (.gr.bygid) Х ОНГХЖХЪЛХ Б АЮГЕ ДЮММШУ (.gr.bycount). хЛЕЕРЯЪ ДНОНКМХРЕКЭМШИ ЛЮЯЯХБ, ХМДЕЙЯХПНБЮММШИ ХЛЕМЮЛХ ОНКЭГНБЮРЕКЕИ (.gr.groupsbyuser), ОПЕДЯРЮБКЪЧЫХИ ЯОХЯНЙ ПЮГДЕКЕММШУ ОПНАЕКЮЛХ ЦПСОО, Й ЙНРНПШЛ ОПХМЮДКЕФХР ЙЮФДШИ ОНКЭГНБЮРЕКЭ. б НРКХВХЕ НР ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ, ЛНФМН ХЛЕРЭ ЙПЮРМШЕ ГЮОХЯХ Б АЮГЕ ДЮММШУ ДКЪ РНИ ФЕ ЯЮЛНИ ЦПСООШ. щРН НАШВМН, ЙНЦДЮ ЦПСООЮ ХЛЕЕР АНКЭЬНЕ ЙНКХВЕЯРБН ВКЕМНБ. оНДНАМЮЪ ОЮПЮ БУНДНБ ЛНФЕР БШЦКЪДЕРЭ РЮЙ: tvpeople:*:101:johny,jay,arsenio tvpeople:*:101:david,conan,tom,joanоН ЩРНИ ОПХВХМЕ .gr.init ЯЛНРПХР, МЕ БЯРПЕВЮКНЯЭ КХ ПЮМЭЬЕ МЕЙНРНПНЕ ЦПСООНБНЕ ХЛЪ ХКХ ЦПСООНБНИ ХДЕМРХТХЙЮРНП. еЯКХ ДЮ, ОНКЭГНБЮРЕКЭЯЙХЕ ХЛЕМЮ ОПНЯРН ОПХЯНЕДХМЪЧРЯЪ Й ОПЕФМЕЛС ЯОХЯЙС ОНКЭГНБЮРЕКЕИ. (тЮЙРХВЕЯЙХ ХЛЕЕРЯЪ МЕАНКЭЬЮЪ ОПНАКЕЛЮ Я ОПЕДЯРЮБКЕММШЛ БШЬЕ ЙНДНЛ. оПЕДОНКНФХЛ, ВРН Б ОЕПБНЕ БПЕЛЪ МХЙЮЙХУ ХЛЕМ МЕ АШКН. щРНР ЙНД ДНАЮБКЪЕР ХЛЕМЮ Я БЕДСЫЕИ ГЮОЪРНИ. нМ РЮЙФЕ МЕ ОПНБЕПЪЕР, ВРН ХЛЕЕРЯЪ $4.) б ЙНМЖЕ .gr.init ГЮЙПШБЮЕР ЙНМБЕИЕП Й grcat, БНЯЯРЮМЮБКХБЮЕР FS, RS Х $0, ХМХЖХЮКХГХПСЕР .gr.count МСКЕЛ (ЩРН МСФМН ОНГДМЕЕ) Х ДЕКЮЕР .gr.inited МЕ МСКЕЛ. function getgrnam(group) - .gr.init() if (group in .gr.byname) return .gr.byname[group] return "" "" тСМЙЖХЪ getgrnam ОНКСВЮЕР Б ЙЮВЕЯРБЕ ЮПЦСЛЕМРЮ ЦПСООНБНЕ ХЛЪ, Х ЕЯКХ ЩРЮ ЦПСООЮ ХЛЕЕРЯЪ, РН НМЮ Х БНГБПЮЫЮЕРЯЪ. б ОПНРХБМНЛ ЯКСВЮЕ getgrnam БНГБПЮЫЮЕР ОСЯРСЧ ЖЕОНВЙС. function getgrgid(gid) - .gr.init() if (gid in .gr.bygid) return .gr.bygid[gid] return "" "" тСМЙЖХЪ getgrgid ОНДНАМЮ ТСМЙЖХХ getgrМЮЛ, НМЮ ОНКСВЮЕР ВХЯКНБНИ ХДЕМРХТХЙЮРНП ЦПСООШ Х ХЫЕР ХМТНПЛЮЖХЧ, ЯБЪГЮММСЧ Я ЩРХЛ ЦПСООНБШЛ ХДЕМРХТХЙЮРНПНЛ. function getgruser(user) - .gr.init() if (user in .gr.groupsbyuser) return .gr.groupsbyuser[user] return "" "" тСМЙЖХЪ getgruser МЕ ХЛЕЕР ДБНИМХЙЮ Б яХ. нМЮ ОНКСВЮЕР ХЛЪ ОНКЭГНБЮРЕКЪ Х БНГБПЮЫЮЕР ЯОХЯНЙ ЦПСОО, ВКЕМНЛ ЙНРНПШУ ЪБКЪЕРЯЪ МЮГБЮММШИ ОНКЭГНБЮРЕКЭ. function getgrent() - .gr.init() if (++.gr.count in .gr.bycount) return .gr.bycount[.gr.count] return "" "" тСМЙЖХЪ getgrent ОПНЯЛЮРПХБЮЕР АЮГС ОНЯКЕДНБЮРЕКЭМН ЬЮЦ ГЮ ЬЮЦНЛ. нМЮ ХЯОНКЭГСЕР .gr.count ДКЪ ЯКЕФЕМХЪ ГЮ ЯБНЕИ ОНГХЖХЕИ Б ЯОХЯЙЕ. function endgrent() - .gr.count = 0 "" endgrent СЯРЮМЮБКХБЮЕР .gr.count МЮ МНКЭ РЮЙ ВРН getgrent ЛНФЕР ЯРЮПРНБЮРЭ НОЪРЭ Я МЮВЮКЮ. рЮЙ ФЕ ЙЮЙ Я ОНДОПНЦПЮЛЛЮЛХ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ, ЙЮФДЮЪ ТСМЙЖХЪ БШГШБЮЕР .gr.init ДКЪ ХМХЖХЮКХГЮЖХХ ЛЮЯЯХБНБ. дЕКЮЪ РЮЙ, НМЮ РПЮРХР КХЬМХИ ОПНЦНМ grcat, ЕЯКХ ЩРХ ТСМЙЖХХ ХЯОНКЭГСЧРЯЪ (Б ОПНРХБНОНКНФМНЯРЭ БЮПХЮМРС Я ОЕПЕМНЯНЛ РЕКЮ .gr.init Б ОПЮБХКН BEGIN). аНКЭЬХМЯРБН ПЮАНРШ ЯНЯРНХР Б ЯЙЮМХПНБЮМХХ АЮГШ ДЮММШУ Х ОНЯРПНЕМХХ ПЮГКХВМШУ ЯБЪГЮММШУ ЛЮЯЯХБНБ. тСМЙЖХХ, ЙНРНПШЕ БШГШБЮЕР ОНКЭГНБЮРЕКЭ, ЯЮЛХ ОН ЯЕАЕ НВЕМЭ ОПНЯРШ, НМХ ХЯОНКЭГСЧР Б ЯБНЕИ ПЮАНРЕ ЮЯЯНЖХЮРХБМШЕ ЛЮЯЯХБШ awk. оПНЦПЮЛЛЮ id Б ПЮГДЕКЕ 16.1.3 [оЕВЮРЭ БШУНДМНИ ОНКЭГНБЮРЕКЭЯЙНИ ХМТНПЛЮЖХХ], ЯРП.215, ХЯОНКЭГСЕР ЩРХ ТСМЙЖХХ. 15.13 мЮХЛЕМНБЮМХЕ ЦКНАЮКЭМШУ ОЕПЕЛЕММШУ АХАКХНРЕВМШУ ТСМЙЖХИаКЮЦНДЮПЪ ОСРХ, ОН ЙНРНПНЛС ПЮГБХБЮКЯЪ ЪГШЙ awk, ОЕПЕЛЕММШЕ ЩРНЦН ЪГШЙЮ ХКХ ЦКНАЮКЭМШЕ ( ДЕИЯРБСЧЫХЕ БН БЯЕИ ОПНЦПЮЛЛЕ) ХКХ КНЙЮКЭМШЕ ( ХЯОНКЭГСЕЛШ РНКЭЙН ЙНМЙПЕРМШЛХ ТСМЙЖХЪЛХ). мЕР ОЕПЕЛЕММШУ ОПНЛЕФСРНВМНЦН РХОЮ, ОНДНАМШУ ЯРЮРХВЕЯЙХЛ ОЕПЕЛЕММШЛ Б яХ. аХАКХНРЕВМШЕ ТСМЙЖХХ ВЮЯРН МСФДЮЧРЯЪ Б ЦКНАЮКЭМШУ ОЕПЕЛЕММШУ, ЙНРНПШЕ НМХ ЛНЦСР ХЯОНКЭГНБЮРЭ, ВРНАШ ЯНУПЮМХРЭ ЯНЯРНЪМХЕ ХМТНПЛЮЖХХ ЛЕФДС БШГНБЮЛХ ТСМЙЖХХ. мЮОПХЛЕП, ОЕПЕЛЕММЮЪ .opti ТСМЙЖХХ getopt (ЯЛ, ПЮГДЕК 15.10 [нАПЮАНРЙЮ ОЮПЮЛЕРПНБ ЙНЛЮМДМНИ ЯРПНЙХ], ЯРП., 186), Х ЛЮЯЯХБ .tm.months, ХЯОНКЭГСЕЛШИ ТСМЙЖХЕИ mktime (ЯЛ. ПЮГДЕК 15.7 [оПЕБПЮЫЕМХЕ ДЮРШ Б НРЛЕРЙС БПЕЛЕМХ], ЯРП. 177). рЮЙХЕ ОЕПЕЛЕММШЕ МЮГШБЮЧРЯЪ ВЮЯРМШЛХ, ОНЯЙНКЭЙС ХУ ХЯОНКЭГСЧР РНКЭЙН ТСМЙЖХХ ХГ АХАКХНРЕЙХ. йНЦДЮ ОХЬСР АХАКХНРЕВМСЧ ТСМЙЖХЧ, МСФМН ЯРЮПЮРЭЯЪ РЮЙ БШАПЮРЭ ХЛЕМЮ ДКЪ ВЮЯРМШУ ОЕПЕЛЕММШУ, ВРНАШ МЕ АШКН ЙНМТКХЙРНБ Я КЧАШЛХ ДПСЦХЛХ ОЕПЕЛЕММШЛХ, ХЯОНКЭГСЕЛШЛХ ДПСЦХЛХ АХАКХНРЕВМШЛХ ТСМЙЖХЪЛХ ХКХ ЦКЮБМНИ ОПНЦПЮЛЛНИ ОНКЭГНБЮРЕКЪ. мЮОПХЛЕП, ХЛЪ БПНДЕ `i' ХКХ `j' МЕ ЪБКЪЕРЯЪ УНПНЬХЛ БШАНПНЛ, ОНРНЛС ВРН ОНКЭГНБЮРЕКЭЯЙХЕ ОПНЦПЮЛЛШ ВЮЯРН ХЯОНКЭГСЧР ОНДНАМШЕ ХЛЕМЮ ДКЪ ЯНАЯРБЕММШУ ЖЕКЕИ. б ОПХЛЕПЮУ ОПНЦПЮЛЛ, ОПХБЕДЕММШУ Б ЩРНИ ЦКЮБЕ, ХЛЕМЮ ВЮЯРМШУ ОЕПЕЛЕММШУ МЮВХМЮЧРЯЪ Я ЯХЛБНКЮ ОНДВЕПЙХБЮМХЪ (`.'). оНКЭГНБЮРЕКХ НАШВМН МЕ СОНРПЕАКЪЧР БЕДСЫХУ ОНДВЕПЙХБЮМХИ Б ХЛЕМЮУ ХУ ОЕПЕЛЕММШУ, РЮЙ ВРН РЮЙНЕ ЯНЦКЮЬЕМХЕ ЯПЮГС СЛЕМЭЬЮЕР ЬЮМЯШ РНЦН, ВРН ЩРН ХЛЪ ЯКСВЮИМН БЯРПЕРХРЯЪ Б ОНКЭГНБЮРЕКЭЯЙНИ ОПНЦПЮЛЛЕ. йПНЛЕ РНЦН, МЕЙНРНПШЕ ХГ АХАКХНРЕВМШУ ТСМЙЖХИ ХЯОНКЭГСЧР ОПЕТХЙЯ, ЙНРНПШИ ОНЛНЦЮЕР СЙЮГШБЮРЭ, ВРН ТСМЙЖХЪ ХКХ ЦПСООЮ ТСМЙЖХИ ХЯОНКЭГСЧР ЩРС ОЕПЕЛЕММСЧ. мЮОПХЛЕП, .tm.months Б mktime (ЯЛ. ПЮГДЕК 15.7 [оПЕБПЮЫЕМХЕ ДЮР Б НРЛЕРЙХ БПЕЛЕМХ], ЯРП. 177), Х .pw.byname Б ОНДОПНЦПЮЛЛЮУ ДКЪ ОНКЭГНБЮРЕКЭЯЙХУ АЮГ ДЮММШУ (ЯЛ. ПЮГДЕК 15.11 [вРЕМХЕ ОНКЭГНБЮРЕКЭЯЙХУ АЮГ ДЮММШУ], ЯРП. 192). лШ ПЕЙНЛЕМДСЕЛ ОНКЭГНБЮРЭЯЪ ЩРХЛ ЯНЦКЮЬЕМХЕЛ, ОНЯЙНКЭЙС НМН ЕЫЕ АНКЭЬЕ СЛЕМЭЬЮЕР БНГЛНФМНЯРЭ ЯКСВЮИМШУ ЙНМТКХЙРНБ Б ХЛЕМЮУ ОЕПЕЛЕММШУ. гЮЛЕРХЛ, ВРН ЩРН ЯНЦКЮЬЕМХЕ ЛНФМН ХЯОНКЭГНБЮРЭ МЕ РНКЭЙН ДКЪ ХЛЕМ ОЕПЕЛЕММШУ, МН РЮЙФЕ Х ДКЪ ВЮЯРМШУ ХЛЕМ ТСМЙЖХИ. уНРЪ Ъ ЛНЦ АШ ОЕПЕОХЯЮРЭ БЯЕ АХАКХНРЕВМШЕ ОНДОПНЦПЮЛЛШ Я ХЯОНКЭГНБЮМХЕЛ ЩРНЦН ЯНЦКЮЬЕМХЪ, Ъ МЮЛЕПЕММН МЕ ЯДЕКЮК ЩРНЦН, ДКЪ РНЦН ВРНАШ ОНЙЮГЮРЭ, ЙЮЙ ПЮГБХБЮКЯЪ ЛНИ ЯНАЯРБЕММШИ ЯРХКЭ awk-ОПНЦПЮЛЛХПНБЮМХЪ Х ОПЕДНЯРЮБХРЭ АЮГХЯ ДКЪ МЮЯРНЪЫЕИ ДХЯЙСЯЯХХ. йЮЙ ГЮЙКЧВХРЕКЭМЮЪ МНРЮ Б МЮХЛЕМНБЮМХХ ОЕПЕЛЕММШУ, ЕЯКХ ТСМЙЖХЪ ДЕКЮЕР ЦКНАЮКЭМШЕ ОЕПЕЛЕММШЕ ДНЯРСОМШЛХ ДКЪ ХЯОНКЭГНБЮМХЪ Б ЦКЮБМНИ ОПНЦПЮЛЛЕ, УНПНЬН МЮВХМЮРЭ РЮЙХЕ ОЕПЕЛЕММШЕ Я ГЮЦКЮБМНИ АСЙБШ. мЮОПХЛЕП, ОЕПЕЛЕММШЕ Opterr Х Optind Б ТСМЙЖХХ getopt (ЯЛ. ПЮГДЕК 15.10 [нАПЮАНРЙЮ ОЮПЮЛЕРПНБ ЙНЛЮМДМНИ ЯРПНЙХ], page 186). бЕДСЫХЕ ГЮЦКЮБМШЕ АСЙБШ СЙЮГШБЮЧР , ВРН ОЕПЕЛЕММШЕ --- ЦКНАЮКЭМШЕ, Ю РНР ТЮЙР, ВРН МЕ БЯЕ АСЙБШ ГЮЦКЮБМШЕ, ОНЙЮГШБЮЕР, ВРН ЩРН МЕ БЯРПНЕММЮЪ ОЕПЕЛЕММЮЪ awk, ОНДНАМЮЪ FS. рЮЙФЕ БЮФМН, ВРНАШ БЯЕ ОЕПЕЛЕММШЕ Б АХАКХНРЕВМШУ ТСМЙЖХЪУ, ЙНРНПШЕ МЕ МСФДЮЧРЯЪ Б ЯНУПЮМЕМХХ ЯНЯРНЪМХЪ, АШКХ ТЮЙРХВЕЯЙХ НАЗЪБКЕМШ КНЙЮКЭМШЛХ. еЯКХ ЩРН МЕ ЯДЕКЮМН, ОЕПЕЛЕММЮЪ ЛНФЕР ЯКСВЮИМН ХЯОНКЭГНБЮРЭЯЪ Б ОПНЦПЮЛЛЕ ОНКЭГНБЮРЕКЪ, ВРН ОПХБЕДЕР Й НЬХАЙЕ, ЙНРНПСЧ НВЕМЭ РПСДМН ОПНЯКЕДХРЭ. function lib.func(x, y, l1, l2) - ... ХЯОНКЭГСЕР ОЕПЕЛЕММСЧ some.var # some.var ЛНФЕР АШРЭ КНЙЮКЭМНИ ... # МН ЩРН МЕ НВЕБХДМН Я ОЕПБНЦН БГЦКЪДЮ "" дПСЦНЕ ЯНЦКЮЬЕМХЕ, НАШВМНЕ Б НАЗЕДХМЕМХХ Tcl, ЯНЯРНХР Б ХЯОНКЭГНБЮМХХ НРДЕКЭМНЦН ЮЯЯНЖХЮРХБМНЦН ЛЮЯЯХБЮ ДКЪ ГЮОНЛХМЮМХЪ ГМЮВЕМХИ, МСФМШУ ДКЪ АХАКХНРЕВМШУ ТСМЙЖХИ ХКХ ДКЪ "ОЮЙЕРЮ." щРН ГМЮВХРЕКЭМН СЛЕМЭЬЮЕР ЙНКХВЕЯРБН ТЮЙРХВЕЯЙХ ХЯОНКЭГСЕЛШУ ЦКНАЮКЭМШУ ХЛЕМ. мЮОПХЛЕП, ТСМЙЖХХ, НОХЯЮММШЕ Б ПЮГДЕКЕ 15.11 [вРЕМХЕ ОНКЭГНБЮРЕКЭЯЙНИ АЮГШ ДЮММШУ], ЯРП. 192, ЛНЦСР ХЯОНКЭГНБЮРЭ PW.data["inited"], PW.data["total"], PW.data["count"] Х PW.data["awklib"] БЛЕЯРН .pw.inited, .pw.awklib, .pw.total Х .pw.count. оПЕДКЮЦЮЕЛШЕ Б ЩРНЛ ПЮГДЕКЕ ЯНЦКЮЬЕМХЪ ЕЯРЭ РНКЭЙН ЯНБЕРШ. нР БЮЯ МЕ РПЕАСЕРЯЪ ОХЯЮРЭ ОПНЦПЮЛЛШ РНКЭЙН РЮЙ, ЛШ РНКЭЙН ПЕЙНЛЕМДСЕЛ ЩРН. |
<<< | нЦКЮБКЕМХЕ | яРПЮМХЖШ: 15 16 | >>> |