-01 33 01-4 Следующая группа ключей является взаимоисключающей: -e Приводит к созданию списка команд a, c и d для редактора ed, который воссоздает "файл2" из "файла1". Следующая программа для интерпретатора команд совместно с опцией "-е" помогает сопро- вождать несколько версий файла. Под руками нужно иметь только исходную версию файла ($1) и цепоч- ку списков команд ed для перехода от одной вер- сии к другой, полученных с помощью ed ($2, &3, ...). "последняя версия" помещается в стан- дартный файл вывода: (shift; cat $*; echo '1,$p') ! ed -$1 ; -f Генерирует список аналогичный "-e", не использу- емый с ed, и в обратном порядке; -c Выдает контекст,в котором встречаются измененные строки. По умолчанию выдается три строки до и три строки после различающихся строк. Число до- полнительно выдаваемых строк можно задавать. Так команда с ключом "-c10", будет выдавать 10 строк до и 10 строк после каждой различающейся стро- ки. Кроме того, при задании "-c" выдаются имена сравниваемых файлов с датами их создания. Сооб- щения о каждом изменении разделяются строками "**********". Строки,отсутствующие в файле1,мар- кируются символом "-".Строки,добавленные в фай- л2,символом "+". измененные строки символом "!"; 124 АПК 00210-01 33 01-4 -Dстрока Создает об'единенную версию файлов (файл1 и файл2), окружая все различающиеся строки дирек- тивами условной компиляции препроцессора языка Си. При этом "строка" используется в качестве аргумента директив препроцессора. Так, если в файлax file1 и file2 различается строка: long int k=1000000 /* строка из file1 */ int k=1000000 /* строка из file2 */ команда: diff -DLONGINT file1 file2 проводит выдачу в стандартный вывод файла, в ко- тором данная строка будет заменена на следующую конструкцию: #ifndef LONGINT long int k=1000000 /* строка из file1 */ #else int k=1000000 /* строка из file2 */ #endif -h Выполняет свою работу быстро и грубо. Она рабо- тает только в тех случаях, когда участки измене- ний малы и хорошо отделены друг от друга, однако может обрабатывать файлы неограниченной длины. С ключом "-h" не допускаются ключи "-e" и "-f". За исключением редких случаев, diff находит наименьший 125 АПК 00210-01 33 01-4 достаточный набор различий файлов. ФАЙЛЫ: /tmp/d????? /usr/lib/diffh для ключа "-h". ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: cmp, comm, ed ДИАГНОСТИКА: Код возврата равен: 0 - если нет различий; 1 - если различия есть; 2 - если выполение команды неудачно. ЗАМЕЧАНИЯ: Списки редактирования, генерируемые с ключами "-e" и "-f", не создают строк, состоящих из одной ".". 126 АПК 00210-01 33 01-4 ИМЯ: diff3 - сравнение трех файлов. ФОРМАТ: diff3 [-ех3] файл1 файл2 файл3 ОПИСАНИЕ: Команда diff3 сравнивает три версии файла и сообщает степени рассогласования текстов, отмечаемые следующими кодами: ==== все три файла различны; ====1 отличается "файл1"; ====2 отличается "файл2"; ====3 отличается "файл3". Вид изменения, позволяющий преобразовать данный учас- ток данного файла, указывается одним из следующих спо- собов: f:n1 a текст должен быть добавлен после строки с номе- ром n1 в файле "f", где f=1, 2 или 3. f:n1,n2 c Текст должен быть изменен на участке от строки n1 до строки n2. Если n1=n2, участок может быть сокращен до n1. Исходное содержимое участка приводится сразу же после 127 АПК 00210-01 33 01-4 указания "c". Если содержимое двух файлов одинаково, содержимое файла с меньшим номером не выводится. С ключoм "-e" diff3 создает командный файл для редак- тора ed, который включит в "файл1" все изменения между файлами "файл2" и "файл3", т.е. изменения, которые нормально были бы помечены "====" и "====3". Опция "-x" ("-3") создает командный файл для включения только изменений, отмечаемых "====" ("====3"). Следу- ющая команда применит полученный в результате ко- мандный файл (script) к файлу "файл1": (cat script; echo '1,$p') | ed - файл1 ФАЙЛЫ: /tmp/d3????? /usr/lib/diff3 ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: diff ЗАМЕЧАНИЯ: Строки текста, состоящие из одной ".", нарушают работу "-e". Файлы, длина которых превышает 64K байт, не обрабаты- ваются. 128 АПК 00210-01 33 01-4 ИМЯ: du - печать сведений об использовании дисков. ФОРМАТ: du [-s] [-a] [имя...] ОПИСАНИЕ: Команда du выдает число блоков, занимаемых всеми фай- лами и справочниками (рекурсивно), содержащмися внутри каждого заданного справочника или файла "имя". Если "имя" отсутствует, используется ".". Ключ "-s" вызывает выдачу только общего итога. Ключ "-a" вызывает вывод сообщения по каждому файлу. При отсутствии ключа сообщения генерируются только по справочникам. Файлы, которые имеют несколько альтернативных имен, учитываются только один раз. ЗАМЕЧАНИЯ: Если в качестве параметров заданы не справочники и не указан ключ "-a", то они не распечатываются. Если имеется слишком много различных альтернативных имен файлов, команда du учитывает избыточные файлы по несколько раз. 129 АПК 00210-01 33 01-4 ИМЯ: ЕС - построитель среды Паскаля ФОРМАТ: ЕС ОПИСАНИЕ: ЕС принимает на стандартном входе исходный текст прог- раммы на Паскале и извлекает об'явления. Эта команда позволяет создавать среду для $x-опции компиляции. 130 АПК 00210-01 33 01-4 ИМЯ: echo - выдача параметров. ФОРМАТ: echo [-n] [парам] ... ОПИСАНИЕ: Команда echo записывает свои параметры, разделенные пробелами и заканчивающиеся символом новой строки, в стандартный файл вывода. Если используется флаг "-n", к выводу не добавляется символ новой строки. Команда echo используется для выдачи диагностических сообщений в программах интерпретатора команд и для за- писи постоянных данных в потоках. Для посылки диагнос- тического сообщения в стандартный файл ошибок выполни- те команду: echo "текст сообщения" 1>&2 131 АПК 00210-01 33 01-4 ИМЯ: ed - строчный редактор текстов. ФОРМАТ: ed [-] [-х] [имя] ОПИСАНИЕ: Для UNIX-образных систем, ed является стандартным ре- дактором текстов. При интерактивной работе он уступает по удобству полиэкранному редактору, но может работать с любыми терминалами (например, с телетайпами). Редактор ed работает с копией редактируемого файла. Сделанные в копии изменения не влияют на исходный файл до тех пор, пока не будет выдана команда "w" (запись). Копия редактируемого текста размещается во временном файле, называемом "буфером". Если задан параметр "имя", указанный файл считывается в буфер редактора для последующей обработки. Если ука- зан ключ "-х", перед чтением файла выполняется команда "x" для работы с зашифрованными файлами. Ключ "-" по- давляет печать пояснительных сообщений и используется при вводе инструкций редактирования из командного файла. Команды редактора ed имеют простую и регулярную струк- туру: 0 или несколько "указателей", за которыми следу- ет односимвольное "имя команды" и, возможно, парамет- ры. "Указатели" определяют одну или несколько строк в 132 АПК 00210-01 33 01-4 буфере. Пропущенные адреса дополняются по умолчанию. Во время работы ed может находиться либо в командном режиме (когда вводимые строки рассматриваются как инструкции редактирования), либо в режиме ввода (т.е. набираемая информация просто переписывается в файл). В начале сеанса редактор находится в командном режиме. Если был переход в режим ввода, редактор воспринимает только одну команду - выход из данного режима (точка в первой позиции строки). В редакторе ed в ограниченном виде используется поня- тие "регулярного выражения". Регулярное выражение оп- ределяет множество строк символов. Говорят, что член этого множества соответствует этому регулярному выра- жению. В приведенном определении регулярных выражений слово "символ" означает любой символ, за исключением символа новой строки: 1) Любой символ, за исключением специальных симво- лов, соответствует самому себе. Специальными сим- волами являются разделитель регулярных выражений, знаки "[." и, иногда "^*$"; 2) "." соответствует любому символу; 3) " нием цифры или "()", соответствует этому символу; 4) Непустая строка "s", заключенная в квадратные скобки ([s] или [^s]), сответствует любому симво- 133 АПК 00210-01 33 01-4 лу,входящему (или не входящему) в строку "s". Внутри строки "s" символ " го значения, а "]" может появляться только в ка- честве первой буквы. Подстрока "a-b", где "a" и "b" расположены в возрастающем порядке относи- тельно русского или латинского алфавитов (для специальных символов относительно кода КОИ-8), обозначает диапазон символов от "a" до "b", вклю- чительно; 5) Регулярное выражение вида 1-4, за которым следует "*", определяет последовательность из 0 или более соответствий этому регулярному выражению; 6) Регулярное выражение "x", находящееся между " и ")", соответствует тому же, что и "x"; 7) Знак " той же строке, что и находящееся в скобках регу- лярное выражение, начинающееся с n-ой " 8) Регулярное выражение "x" вида 1-8, за которым следует регулярное выражение "y" вида 1-7, соот- ветствует соответствие для "x", за которым следу- ет соответствие для "y", причем соответствие для "x" выбирается как можно большим, однако допуска- ющим соответствие для "y"; 9) Регулярное выражение вида 1-8, которому пред- шествует "^" (или за которым следует "$"), огра- 134 АПК 00210-01 33 01-4 ничено соответствиями, начинающимися в левом (или заканчивающимися в правом) конце строки; 10) Регулярное выражение вида 1-9 выбирает самое длинное и крайнее слева соответствие в строке; 11) Пустое регулярное выражение заменяет последнее встреченное регулярное выражение. Регулярные выражения используются в адресах для опре- деления строк, а также в одной команде (s) для опреде- ления части строки, которую нужно заменить. Если тре- буется использовать один из метасимволов регулярных выражений в качестве обычного символа, этому символу должна предшествовать " лам, связывающим регулярные выражения (часто "/"), так и к самому символу " Для понимания системы адресации в редакторе ed необхо- димо представлять себе, что в каждый момент времени существует "текущая строка". Вообще говоря, текущая строка представляет собой последнюю строку, обработан- ную некоторой командой, однако точное влияние на поло- жение текущей строки рассматривается в описании команд. Адреса строятся следующим образом. 1) Символ "." адресует текущую строку; 2) Символ "$" адресует последнюю строку буфера; 3) Десятичное число "n" адресует n-ую строку буфера; 135 АПК 00210-01 33 01-4 4) "/x" указывает строку, помеченную именем "x", ко- торое должно представлять собой малую букву. Строки помечаются с помощью команды "k", которая описана ниже; 5) Регулярное выражение, заключенное в символы "/", указывает строку, которая определяется путем по- иска вперед от текущей строки до первой строки, содержащей последовательность символов, соот- ветствующую данному регулярному выражению. При необходимости после достижения конца буфера поиск продолжается с его начала; 6) Регулярное выражение, заключенное в вопроситель- ные знаки "?", адресует строку, которая определя- ется путем поиска назад от текущей строки до первой строки, содержащей последовательность сим- волов, соответствующую данному регулярному выра- жению. При необходимости после достижения начала буфера поиск продолжается с его конца; 7) Адрес, за которым следует знак "+" или знак "-" и десятичное число, определяет этот адрес плюс (или минус) указанное количество строк. Знак плюс может быть опущен; 8) Если адрес начинается со знака "+" или "-", вы- полняется сложение или вычитание по отношению к текущей строке. Например, "-5" означает ".-5". 136 АПК 00210-01 33 01-4 9) Если адрес заканчивается знаком "+" или "-", к нему добавляется (или вычитается) 1. Как следствие этого правила и правила 8, адрес "-" относится к строке, которая предшествует текущей строке. Более того, знаки "+" и "-" в конце обла- дают эффектом накопления, так что "--" относится к текущей строке минус 2. 10) Символ "^" в адресах эквивалентен символу "-". Команды могут требовать ни одного, один или два адре- са. Команды, в которых не требуется адрес, рассматри- вают наличие адреса как ошибку. Если в командах, где требуется один или два адреса, указано недостаточное количество адресов, принимаются стандартные адреса. Если в команде указано больше адресов, чем требуется, используются последние один или два адреса (в зависи- мости от того, сколько нужно). Обычно адреса отделяются друг от друга с помощью запя- той ",". Они могут разделяться также точкой с запятой ";". В этом случае текущая строка "." устанавливается на первый адрес перед тем, как интерпретируется следу- ющий. Эта особенность может быть использована при оп- ределении начальной строки для прямого и обратного по- иска ("/", "?"). Второй адрес любой двухадресной пос- ледовательности должен соответствовать строке, следу- ющей за строкой, которая соответствует первому адресу. В приведенном списке команд редактора ed стандартные 137 АПК 00210-01 33 01-4 адреса указаны в скобках. Скобки не являются частью адреса, а используются лишь для того, чтобы показать, что данные адреса являются стандартными. Как отмечалось ранее, появление в одной строке нес- кольких команд в общем случае является ошибкой. Одна- ко, к большинству команд могут быть добавлены команды "p" или "l", которые вызывают распечатку текущей стро- ки в одном из двух форматов. К командам может также добавляться команда "n", кото- рая вызывает печать номера строки в выводе команды. Эти суффиксы могут об'единяться в любом порядке. (.)a <текст> . Команда дозаписи - считывает указанный текст и добавляет его после строки с указанным адресом. "." остается в последней введенной строке, если она имеется, в противном случае - в адресуемой строке. В этой команде допускается адрес "0", при этом текст помещается в начало буфера. (.,.)c <текст> . Команда замены удаляет адресуемые строки, затем считывает вводимый текст, который заменяет эти 138 АПК 00210-01 33 01-4 строки. "." остается в последней введеной стро- ке; если таковых не было, она остается в строке, предшествовавшей удаленным строкам. (...) d Команда удаления удаляет адресуемые строки из буфера. Текущей становится строка, первоначально находившаяся после последней удаленной строки. Если удаленные строки располагались в конце, те- кущей строкой становится новая последняя строка. e имя_файла Команда редактирования вызывает удаление всего содержимого буфера и последующее считывание в него файла с указанным именем. "." устанавлива- ется на последней строке буфера. Печатается ко- личество считанных символов. "имя_файла" запоми- нается для возможного использования в качестве стандартного имени файла в последующих командах r или w. Если "имя_файла" отсутствует, использу- ется запомненное имя. E имя_файла Эта команда выполняет те же действия, что и ко- манда "e", за исключением того, что не выдается диагностических сообщений, если после последнего изменения буфера не была выдана команда "w". f имя_файла Команда печати имени файла распечатывает текущее 139 АПК 00210-01 33 01-4 запомненное имя файла. Если указывается "имя_файла", текущее запомненное имя файла заме- няется на "имя_файла". (1,$) g/регулярное выражение/список команд В этой команде на первом шаге помечаются все строки, которые соответствуют заданному регуляр- ному выражению. После этого для каждой такой строки выполняется заданный список команд, при- чем "." первоначально устанавливается в этой строке. Одна команда или первая из нескольких команд располагается в той же строке, что и ко- манда "g". Все строки списка, состоящие из нес- кольких строк, должны заканчиваться символом " ребление команд "a", "i" "c" и связанного с ними ввода. ".", завершающая режим ввода, может быть опущена, если она находится в последней строке списка команд. Команды "g" и "v" в списке команд не допускаются. (.)i <текст> . Эта команда вставляет заданный текст перед адре- суемой строкой. "." остается в последней вводи- мой строке или, если ее нет, в строке перед ад- ресуемой строкой. Эта строка отличается от ко- 140 АПК 00210-01 33 01-4 манды а только местом, куда помещается текст. (.,.+1)j Эта строка об'единяет адресуемые строки в одну строку. Промежуточные символы новой строки прос- то исчезают. "." остается в результирующей стро- ке. (.)kh Команда маркирования присваивает адресуемой строке имя "х", которое должно представлять собой малую букву. Впоследствии данная строка может адресоваться с помощью формы адреса "'х". (.,.)l Эта команда распечатывает адресуемые строки под- робным образом: неграфические символы печатаются в виде двух восьмеричных цифр, а длинные строки переносятся. Команда "l" может располагаться в одной и той же строке после любой не связанной с вводом-выводом команды. (.,.)ma Команда пересылки перемещает адресуемые строки и помещает их после строки, адресуемой с помощью "a". Последняя из перемещенных строк становится текущей строкой. (.,.)n Команда нумерации распечатывает адресуемые стро- ки вместе с номерами строк и символом табуляции 141 АПК 00210-01 33 01-4 слева. (.,.)p Эта команда распечатывает адресуемые строки. "." остается в последней распечатанной строке. Команда p может располагаться в одной и той же строке после любой не связанной с вводом-выводом команды. (.,.)P Эта команда является синонимом команды "p". q Команда выхода вызывает выход из редактора ed. Автоматическая запись в файл не производится. Q Эта команда аналогична команде "q", за исключе- нием того, что не выдается диагностических сооб- щений, если после последнего изменения буфера не была выдана команда "w". ($)r имя_файла Команда чтения считывает указанный файл и поме- щает результат после адресуемой строки. Если имя файла не указано, используется запомненное имя файла, если таковое имеется (см. команды "l" и "f"). Имя файла запоминается, если уже не было запомненного имени файла. Для команды "r" допус- кается адрес "0", который приводит к тому, что файл считывается в начало буфера. Если считыва- ние прошло успешно, печатается количество счи- 142 АПК 00210-01 33 01-4 танных символов. "." остается в последней счи- танной из файла строке. (.,.)s/регулярное выражение/замена/ или (.,.)s/регулярное выражение/замена/g Команда подстановки просматривает каждую адресу- емую строку на предмет соответствия заданному регулярному выражению. Если после команды указан индикатор глобального замещения "g", в каждой строке, в которой обнаружено соответствие, все соответствующие последовательности символов за- мещаются указанной "заменой". Если индикатор глобального замещения отсутствует, заменяется только первая соответствующая последовательность символов. Если подстановка не выполняется ни в одной из адресуемых строк, это является ошибкой. Для разделения регулярного выражения и замены вместо "/" может использоваться любой символ пунктуации. "." остается в последней строке, где была выполнена подстановка. Амперсанд "&", встречающийся в замене, заменяется строкой сим- волов, соответствующей регулярному выражению. Специальное значение символа "&" в указанном контексте может быть отменено посредством указа- ния перед ним " замещаются текстом, соответствующим n-ому регу- лярному выражению, заключенному между " и ")". Если имеются вложенные подвыражения в 143 АПК 00210-01 33 01-4 скобках, "n" определяется путем подсчета случаев употребления " начиная слева. Строки могут быть разделены посредством подстановки в них символов новой строки. Символы новой строки в строке замены должны быть выделены посредством указания перед ними символа " заключительных разделителя могут быть опущены, подразумевая суффикс "p". Специальная форма ко- манды "s" без последующих разделителей повторяет последнюю команду подстановки для адресуемых строк. После "s" могут следовать буквы "r" (ис- пользовать последнее регулярное выражение в левой стороне вместо последней команды подста- новки в левой стороне), "p" (дополняет установку суффикса "p" для предыдущей установки) и g (до- полняет установку суффикса "g"). Эти буквы могут об'единяться в любом порядке. (.,.)t a Эта команда работает аналогично команде "m", за исключением того, что копия адресуемых строк по- мещается после адреса "a" (который может быть 0). "." остается в последней строке копии. (.,.)u Команда аннулирования восстанавливает буфер, возвращая его в состояние, которое он имел перед последней командой модификации буфера. Положение текущей строки также восстанавливается. Команда- 144 АПК 00210-01 33 01-4 ми, модифицирующими буфер, являются "a, c, d, g, i, k и v". При анулировании "g" и "v" рассматри- ваются как одиночные команды модификации буфера. Команда анулирования является инверсной по отношению к самой себе. Когда редактору ed не хватает памяти, полное аннулирование невозможно, и команда "u" может аннулировать только влияние последней подстановки в текущей строке. Такое ограниченное аннулирование относится также и к командным файлам редактора, когда ed вызывается с ключем "-". (1,$)v/регулярное выражение/список команд Эта команда аналогична команде "g", за исключе- нием того, что список команд выполняется при на- чальной установке "." на каждую строку кроме тех, которые соответствуют регулярному выраже- нию. (1,$)w имя_файла Команда записи записывает адресуемые строки в указанный файл. Если файл не существует, он соз- дается. Имя файла запоминается, если еще не было запомненного имени. Если имя файла не задается, используется запомненное имя файла, если оно имеется (см. команды "е" и "f"). Положение "." не изменяется. Если данная команда выполнилась успешно, печатается количество записанных симво- лов. 145 АПК 00210-01 33 01-4 (1,$)W имя_файла Эта команда аналогична команде "w", за исключе- нием того, что адресуемые строки добавляются к файлу. (1,$)WQ имя_файла Эта команда аналогична команде "w", за исключе- нием того, что затем выполняется команда "q", осуществляющая выход из редактора после записи файла. x Из стандартного ввода запрашивается строка с ключом. Впоследствии команды "r", "e" и "w" будут зашифровывать и расшифровывать текст с по- мощью алгоритма "crypt", используя этот ключ. Пустой ключ отменяет режим шифрации. (.+1)z или (.+1)zn Эта команда используется для просмотра буфера, начиная с исходной строки. Распечатывается 22 (или "n", если указано) строки. Последняя напе- чатанная строка становится текущей строкой. Зна- чение "n" запоминается, т.е. оно становится стандартным для последующих команд "z". ($)= Распечатывается номер строки для адресуемой строки. Эта команда не меняет положения ".". 146 АПК 00210-01 33 01-4 !<команда языка управления заданиями> Часть строки после "!" передается sh для выпол- нения в качестве команды. Положение "." не меня- ется. (.+1,.+1) <конец строки> Одиночный адрес в строке вызывает распечатку ад- ресуемой строки. Пустая строка эквивалентна ".+1р". Это полезно для прохода по тексту. Если указывается два адреса, не разделяемые точкой с запятой, редактор ed распечатывает указанный ди- апазон строк. Если они разделены точкой с запя- той, распечатывается вторая строка. Если посылается сигнал прерывания, редактор ed печата- ет "?interrupted" ("?прерван") и возвращается в ко- мандный режим. Некоторые размерные ограничения: 512 символов в стро- ке, 256 символов в списке команд для команды "g", 64 символа в имени файла. Предел количества строк зависит от размера оперативной памяти: каждая строка занимает 2 слова. При чтении файла ed отбрасывает символы nul кода КОИ-8 и все символы после последнего символа новой строки. ФАЙЛЫ: /tmp/e* edhup 147 АПК 00210-01 33 01-4 При зависании терминала здесь сохраняется протокол вы- полненной работы. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: sed, crypt ДИАГНОСТИКА: "?name" для недоступного файла. "?" при прочих ошибках. Для предотвращения потери ценной информации команды "q" и "е" считаются ошибочными, если после последней модификации буфера не была выдана команда "w". Повтор- ная команда "q" или "е" выполняется всегда. ЗАМЕЧАНИЯ: Команда "l" неправильно обрабатывает символ "del" ("забой"). Команда аннулирования приводит к потере меток в восстановленных строках. 148 АПК 00210-01 33 01-4 ИМЯ: expand, unexpand - развернуть (свернуть) символы табу- ляции. ФОРМАТ: expand [-табстоп] [-таб1, таб2, ..., табN] [файл ... ] unexpand [-a] [файл ... ] ОПИСАНИЕ: Команда expand обрабатывает указанные файлы или стан- дартный ввод и производит запись в стандартный вывод, заменяя символы табуляции на пробелы. Символы возврата на шаг в выводе сохраняются и уменьшают счетчик пози- ций для связанных с табуляцией расчетов. Команда expand полезна для предварительной обработки символь- ных файлов, содержащих символы табуляции (перед сорти- ровкой, просмотром определенных столбцов и т.п.). Если задан единственный параметр "табстоп", размер та- буляции устанавливается равным "табстоп" пробелам вместо стандартного значения 8. Если задано несколько табуляционных остановов, позиции табуляции устанавли- ваются в указанных столбцах. Команда unexpand заменяет последовательности пробелов на символы табуляции, читая исходные данные из стан- дартного ввода или (если заданы файлы) из указанных файлов. Если задан ключ "-a", символы табуляции встав- ляются везде,где это возможно. По умолчанию unexpand заменяет на символы табуляции только первые пробелы. 149 АПК 00210-01 33 01-4 ИМЯ: expr - вычисление параметров как выражения. ФОРМАТ: expr парам ... ОПИСАНИЕ: Параметры рассматриваются как выражение. После вычис- ления результат записывается в стандартный вывод. Каждый член выражения представляет собой отдельный па- раметр. Oперации и ключевые слова. Этот список составлен в по- рядке возрастания старшинства операций.Oперации с оди- наковым старшинством сгруппированы: Выр ! выр Выводит первое выражение "выр", если оно не пус- тое и не равно "0", в противном случае выводит второе выражение; Выр & выр Если ни одно из выражений не является пустым или "0", выводит первое выражение, в противном слу- чае выводит "0"; Выр опотн выр "Опотн" представляет собой одну из операций от- ношения <, <=, =, !=, >=, >. Выводит "1", если указанное сравнение верно, и "0", если оно оши- бочно. Если оба выражения являются целыми, срав- 150 АПК 00210-01 33 01-4 нение является численным, иначе оно является лексикографическим; выр + выр выр - выр Сложение или вычитание параметров; Выр * выр выр / выр выр % выр Умножение, деление или вычисление остатка от де- ления параметров; Выр : выр Операция сравнивает строку, содержащуюся в первом параметре, с регулярным выражением, со- держащимся во втором параметре. Синтаксис регу- лярного выражения такой же, как в редакторе ed. Символы шаблона .) могут использоваться для вы- бора части первого параметра. В остальных случа- ях выводится количество символов, соответству- ющих шаблону ("0", если сравнение неудачно); ( Выр ) Скобки для группировки. ПРИМЕРЫ: Увеличение на "1" переменной A языка управления зада- ниями: 151 АПК 00210-01 33 01-4 A=`expr $A + 1` Нахождения части имени файла (младшей части) из полно- го имени файла, хранящегося в переменной A, которая может содержать или не содержать "/": expr $A : '.*/)' '|' $A В последнем примере сдледует обратить внимание на то, что операции команды expr, совпадающие с метасиволами языка управления заданиями, взяты в апострофы. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: ed, sh, test ДИАГНОСТИКА: Команда expr возвращает следующие выходные коды: 0 - если выражение не пустое и не равно "0"; 1 - если выражение пустое или "0"; 2 - для неверных выражений. 152 АПК 00210-01 33 01-4 ИМЯ: f77 - компилятор с языка ФОРТРАН-77. ФОРМАТ: f77 [ключ] ... Файл ... ОПИСАНИЕ: Команда f77 представляет собой компилятор с языка ФОРТРАН-77. Распознаются параметры следующих типов: - Параметры, имена которых заканчиваются на ".f", считаются исходными программами на языке ФОРТРАН-77.Oни компилируются, и каждая об'ектная программа помещается в файл текущего справочника под именем, которое получается из имени исходно- го файла путем замены ".f" на ".o"; - Параметры, имена которых заканчиваются на ".r" или ".e", считаются исходными программами на языках RATFOR или EFL соответственно.Oни сперва преобразуются соответствующим препроцессором, а затем компилируются с помощью f77; - Аналогично, параметры, имена которых заканчива- ются на ".c" или ".s", считаются исходными прог- раммами на языке Си или ассемблере.Oни компили- руются или ассемблируются, создавая файлы ".o". Приведенные ключи имеют то же самое значение, что и в команде cc. Описание ключей, задающих режимы загрузки содержится в ld: 153 АПК 00210-01 33 01-4 -c Подавляет загрузку и создает файл ".o" для каж- дого исходного файла; -d Компилятор формирует дополнительные команды и информацию в об'ектном файле для символьного от- ладчика cdebug. -p Подготовить об'ектные файлы для профилирования (см. команду prof); -O Вызвать оптимизатор об'ектного кода; -S Скомпилировать указанные программы и оставить ассемблерный выход в соответствующих файлах с суффиксами ".s". (файлы ".o" не создаются); -f Использовать интерпретатор плавающей запятой, кроме того, подключается вариант компилятора, который может работать на машинах без процессора плавающей запятой. -o вывод Присваивает выходному файлу редактора связей ld имя "вывод" вместо "a.out"; Следующие ключи являются специфическими для f77: -onetrip Компилирует циклы do, которые, получив управле- ние, выполняются по крайней мере один раз. (В ФОРТРАНе-77 циклы do вообще не выполняются, если верхняя граница меньше, чем нижняя); 154 АПК 00210-01 33 01-4 -u Устанавливает тип неопределенных переменных "undefined" вместо использования стандартных правил языка ФОРТРАН; -w Подавляет все предупредительные сообщения. Если этот ключ имеет вид "-w66", подавляются только предупредительные сообщения относительно совмес- тимости с языком ФОРТРАН-66. Ключ "-wki" подав- ляет предупредительные сообщения о русских буквах в идентификаторах; -U По умолчанию прописные буквы в идентификаторах и в ключевых словах переводятся в строчные. Ключ "-U" блокирует перевод, что позволяет различать прописные и строчные буквы в идентификаторах. Ключевые слова в этом случае записываются про- писными буквами; -O<цифра> Разрешить вынесение переменных циклов на ре- гистры с целью оптимизации. Одновременно включа- ется режим "-O". <цифра> определяет число ре- гистров: 1 или 2; -I2 -I4 -Is Флаги влияют на размер целых переменных: флаг "-I2" устанавливает тип "integer" эквивалентным "integer*2", "-I4" - "integer*4". По умолчанию установлен режим "-I4" (в соответствии со стан- дартом переменные типов "integer" и "real" 155 АПК 00210-01 33 01-4 должны занимать одинаковую память). Режим "-Is" разрешает компилятору в режиме "-I4" вычислять индексы в предположении, что они находятся в ди- апазоне чисел типа "integer*2"; -v В этом режиме компилятор сообшает об начале оче- редных этапов трансляции(F77PASS, PASS1, AS, LD, C), а также выдает версию компилятора; -V Отладочный режим работы компилятора. Распечаты- ваются команды "shell", запускаемые в процессе трансляции вместе со своими параметрами; -T<символ><имя-компоненты> Заменить какой то проход компилятора на указан- ную программу. Служит для отладки компилятора или вызова других его версий. <символ> обознача- ет следующие компоненты транслятора: "0" - f77 проход 0; "1" - f77 проход 1; "2" - c1 (си-компилятор, проход 1); "o" - c2 (оптимизатор кода); "a" - as (ассемблер); "l" - ld (редактора связей); "f" - головной раздел (вместо /lib/crt0); "m" - макропроцессор m4. Следует иметь в виду, что флаг "-f" переназнача- ет компоненты "1" и "f". 156 АПК 00210-01 33 01-4 -F Обработать соответствующие файлы препроцессорами RATFOR и EFL, поместить результат в файл с суф- фиксом ".f", но не компилировать результат; -m Применить к каждому файлу ".r" или ".e" препроцессор м4 перед обработкой его препроцес- сорами RATFOR и EFL; -ex Использовать строку "x" как ключ для EFL при об-