помещается в файл с соответствующим именем и суффиксом ".i", при этом подавляется вывод строк вида "#line ..."; -C Обычно макропроцессор "cpp" убирает комментарии из своего вывода. Флаг -C блокирует уничтожение комментариев, что бывает необходимо для программ "xstr" или "lint"; -o выход Помещает окончательный результат в файл с именем "выход". Если используется этот ключ, файл "a.out" не будет изменен. -Dимя=опр -Dимя Определяет указанное "имя" для препроцессора, по аналогии с "#define". Если определение не зада- но, данное имя определяется как "1"; -Uимя Удаляет все начальные определения указанного имени; -Iкат Поиск файлов "#include", чьи имена не начинаются с символа "/", всегда производится сначала в те- кущем справочнике, затем в справочниках "кат", перечисленных при ключе -I, а затем - в катало- гах стандартного списка; 46 АПК 00210-01 33 01-4 -B строка Ищет заменяющие фазы компилятора в файлах с име- нем "строка" с суффиксами ccp, c0, c1 и c2. Если "строка" пустая, используется стандартная ре- зервная версия; -t[p012] Ищет только указанные фазы компилятора в файлах, имена которых строятся в соответствии с ключем -B. При отсутствии ключа -B подразумевается сле- дующая "строка": "/usr/c/". -T[al]имя Ассемблер (если указано "a") или редактор связей ("l") вызываются из файла "имя" вместо вызыва- емых по умолчанию. Остальные параметры являются либо ключами редактора связей, либо совместимыми с Си об'ектными программами, полученными обычно в результате предшествующих выпол- нений cc, либо библиотеками совместимых с Си программ. Эти программы, вместе с результатами указанных компи- ляций загружаются (в заданном порядке), давая в ре- зультате выполняемую программу с именем a.out. ФАЙЛЫ: файл.c Входной файл файл.o Об'ектный файл a.out Загрузочный выход /tmp/ctm? Временный 47 АПК 00210-01 33 01-4 /lib/cpp препроцессор /lib/c0 компилятор 0 проход /lib/c1 компилятор 1 проход /lib/fc1 1 проход при флаге "-f" /usr/c/oc[01] резервный компилятор /usr/c/ocpp резервный препроцессор /lib/c2 необязательный оптимизатор /lib/crt0.o Динамический стартер /lib/mcrt0.o Стартер для профилирования /lib/lib[aс].a Стандартные библиотеки /usr/include стандартный каталог для файлов "#include". /lib/fcrt0.0 Стартер для флага "-f" ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : cdeb, prof, adb, ld Имеется отдельное описание языка Си. ДИАГНОСТИКА: Диагностические сообщения, генерируемые самим компиля- тором си, являются достаточно понятными. В некоторых случаях сообщения могут генерироваться ассемблером или редактором связей. 48 АПК 00210-01 33 01-4 ИМЯ: ccat - выдача содержимого компрессированных файлов. ФОРМАТ: ccat [файл ...] ОПИСАНИЕ: Команда ccat выдает содержимое файлов, "сжатых" с по- мощью команды compact. Файл не изменяется. ДИАГНОСТИКА: Сообщения о файлах, которые не могут быть открыты, и т.п. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : compact, uncompact 49 АПК 00210-01 33 01-4 ИМЯ: cd - сменить рабочий справочник ФОРМАТ: cd dirname ОПИСАНИЕ: Команда cd задает справочник с именем "dirname" в ка- честве текущего рабочего справочника. Для изменения текущего справочника необходимо чтобы справочник "dirname" имел разрешение на поиск в нем для данного пользователя. Поскольку для выполнения каждой команды создается новый процесс, команда cd была бы неэффективной, если бы она была написана как обычная команда. Поэтому она является встроенной функцией языков управления задани- ями SHELL и CSHELL. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ : csh, sh, pwd, chdir. 50 АПК 00210-01 33 01-4 ИМЯ: chmod - изменить статус файла ФОРМАТ: chmod статус файл ... ОПИСАНИЕ: Статус каждого из перечисленных файлов изменяется в соответствии со значением параметра "статус", которое может быть абсолютным или символическим. Абсолютное значение статуса представляет собой восьмеричное число, строящееся по правилу "или" из следующих значе- ний: 4000 установить идентификатор хозяина файла при вы- полнении; 2000 установить идентификатор группы по группе хозя- ина файла при выполнении; 1000 бит сохранения образа текста; 0400 разрешение на чтение файла владельцу; 0200 разрешение на запись файла владельцу; 0100 разрешение выполнения (поиска в справочнике) владельцу; 0070 разрешение чтения, записи, выполнения (поиска) группе; 0007 разрешение чтения, записи, выполнения прочим 51 АПК 00210-01 33 01-4 пользователям. Символическое значение "статус" имеет следующий вид: [кто] оп полномочие [оп полномочие] ... Поле "кто" представляет собой комбинацию букв "u" (для полномочий пользователя), "g" (группа), "o" (прочие). Буква "a" заменяет сочетание "ugo". Если поле "кто" опущено, по умолчанию принимается значение "a", однако принимается во внимание маска создания файла (см. umask). Поле "оп" может представлять собой "+" - для добавле- ния полномочия в режим файла, "-" - для удаления пол- номочия и "=" для абсолютного присваивания полномочия (все остальные биты будут сброшены). "Полномочие" представляет собой произвольную комбина- цию букв "r" (чтение), "w" (запись), "x" (выполнение), "s" (установление идентификации пользователя или груп- пы) и "t" (сохранение текстов после выполнения). Отсутствие поля полномочия полезно использовать только с символом "=" для удаления всех полномочий. ПРИМЕРЫ: Первый из приведенных ниже примеров запрещает запись "прочим" пользователям, а второй делает указанный файл выполняемым. chmod o-w файл 52 АПК 00210-01 33 01-4 chmod +x файл ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: ls, chown, stat, umask. ЗАМЕЧАНИЯ: Может быть указано несколько символических режимов, разделенных запятыми. Операции выполняются в заданном порядке. Букву "s" имеет смысл использовать только совместно с "u" или "g". Только владелец файла (или супер-пользователь) может изменить его режим. 53 АПК 00210-01 33 01-4 ИМЯ: clear - очистить экран терминала. ФОРМАТ: clear ОПИСАНИЕ: Команда clear стирает экран терминала, используя ин- формацию об особенностях данного устройства из файла описаний характеристик терминалов (/etc/termcap). ФАЙЛЫ: /etc/termcap описание характеристик терминалов раз- личных типов. 54 АПК 00210-01 33 01-4 ИМЯ: cmp - сравнение двух файлов. ФОРМАТ: cmp [-l] [-s] файл1 файл2 ОПИСАНИЕ: Два указанных файла сравниваются. (если параметр "файл1" представляет собой "-", используется стан- дартный файл ввода). Без параметров команда cmp не вы- дает никаких сообщений, если файлы одинаковы,или ука- зывает номер байта и строки, где произошло несовпаде- ние, если они отличаются. Если один из файлов является началом другого, об этом сообщается. -l печатает номер байта (десятичный) и отличающиеся байты (восьмеричные) для каждого несовпадения; -s для отличающихся файлов ничего не печатается, возвращается только код. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: diff, comm ДИАГНОСТИКА: Возвращается выходной код, равный 0 для идентичных файлов, 1 для отличающихся файлов и 2 для недоступных или пропущенных параметров. 55 АПК 00210-01 33 01-4 ИМЯ: col - уничтожить обратные переводы строки. ФОРМАТ: col [-bfx] ОПИСАНИЕ: Команда col читает стандартный файл ввода и производит запись в стандартный файл вывода. Она выполняет нало- жение строк, подразумеваемое обратными переводами строки (ESC-7 в коде КОИ-8) и прямыми и обратными пе- реводами строки на полшага (ESC-8 и ESC-9). Команда col особенно полезна для фильтрации многоколоночного вывода, полученного командой ".rt" из pif и вывода, получаемого в результате использования препроцессора tbl. Хотя команда col воспринимает на вводе переводы строки на полшага, она обычно не передает их на вывод. Вместо этого текст, который должен был появиться между строк, сдвигается к следующей нижней границе полной строки. Этот режим может быть отменен ключем -f (точно).В этом случае выход col может содержать переводы строки на полшага вперед, однако какие-либо переводы строки назад всегда отсутствуют. Если задан ключ -b, col предполагает, что используемое устройство вывода не имеет возможности возврата на шаг. В этом случае, если несколько символов должны по- явиться на одном и том же месте, будет выдан только 56 АПК 00210-01 33 01-4 последний считанный символ. Управляющие символы SI (017 в коде КОИ-8) и SO (016) считаются началом и концом текста с альтернативным на- бором символов. Набор символов (исходный или альтерна- тивный), связанный с каждым считанным печатным симво- лом, запоминается. При вводе символы SI и SO вставля- ются в нужных местах, чтобы обеспечить соответствующую обработку каждого символа. Команда col обычно преобразует пробелы в символы табу- ляции, чтобы сократить время печати. Если указан ключ -x, это преобразование отменяется. Из входного потока удаляются все управляющие символы, за исключением символов пробела (SP-040), возврата на шаг (BS-010), табуляции (HT-011), возврата каретки (CR-015), новой строки (LF-012), за которым следует один из символов ESC-7, ESC-8, ESC-9, SI, SO. Все ос- тальные непечатаемые символы игнорируются. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: pif, tbl, greek ЗАМЕЧАНИЯ: Нельзя возвратиться назад более, чем на 128 строк. В строке не должно быть более 800 символов, включая символы возврата на шаг. 57 АПК 00210-01 33 01-4 ИМЯ: colcrt - фильтр для файлов в формате pif. ФОРМАТ: colcrt [-] [-2] [файл ...] ОПИСАНИЕ: Команда colcrt обеспечивает виртуальные возможности перевода строки на полшага на половину межстрочного интервала и обратного перевода строки для терминалов, не имеющих указанных средств и на которых повторный вывод символа в одну и ту же позицию разрушает имев- шийся в ней символ. Сдвинутые на полстроки символы и символы подчеркивания (замененные на тире "-") распо- лагаются на новых строках между обычными выходными строками. Необязательный параметр "-" подавляет все подчеркива- ния. Это особенно полезно для просмотра полностью окаймленных таблиц после tbl. Ключ -2 вызывает печать сдвинутых на полстроки симво- лов, фактически удваивая интервал вывода. Обычно ис- пользуется минимальный интервал выводного формата, ко- торый подавляет печать пустых строк. Однако данная программа никогда не подавляет печать двух последова- тельных пустых строк. Ключ -2 полезен при выводе на АЦПУ, когда вывод содержит надстрочные и подстрочные индексы, которые иначе не были бы видны. 58 АПК 00210-01 33 01-4 Типичное использование команды colcrt следующее: tbl exum2.n | pif -ms | colcrt - | more ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: pif, col, more, ul. ЗАМЕЧАНИЯ: Нельзя вернуться более чем на 102 строки. В общем случае при повторном выводе в одну и ту же по- зицию происходит потеря символа.Как специальный слу- чай, в результате наложения "|" и "-" или подчерки- вания получается "+". Длина строки ограничиваются 132 символами. Требуется определенная осторожность при обработке надстрочных и подстрочных индексов в документах, кото- рые уже имеют двойной интервал. 59 АПК 00210-01 33 01-4 ИМЯ : colrm - удалить указанные колоноки. ФОРМАТ: colrm [начстлб [констлб]] ОПИСАНИЕ: Команда colrm удаляет из файла указанные столбцы. Информация читается из стандартного файла ввода и после обработки записывается в стандартный файл выво- да. Если при вызове указан только один параметр, в каждой строке будут удалены все позиции, начиная с указанного столбца. Если указаны два параметра, будут удалены все позиции от начального столбца до конечного столбца. Нумерация столбцов начинается со столбца 1. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: expand ЗАМЕЧАНИЯ Символы табуляции рассматриваются как один символ и один столбец. 60 АПК 00210-01 33 01-4 ИМЯ: comm - выбрать (отбросить) одинаковые строки файлов. ФОРМАТ: comm [-[123]] файл1 файл2 ОПИСАНИЕ: Команда comm считывает файлы "файл1" и "файл2", кото- рые должны быть отсортированы в соответствии с после- довательностью кодов КОИ-8, и генерирует три столбца вывода: строки, входящие только в "файл1", строки, входящие только в "файл2" и строки, входящие в оба файла. Ключ "-" означает использование стандартного файла ввода. Флаги 1, 2 и 3 подавляют печать соответствующих столбцов. Таким образом, команда "comm -12" печатает только строки, общие для обоих файлов. "Comm -23" пе- чатает только строки, которые входят в первый файл, но не входят во второй, а команда "comm -123" символизи- рует отсутствие операции. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: cmp, diff, uniq 61 АПК 00210-01 33 01-4 ИМЯ: compact - компрессия файла ФОРМАТ: compact [файл ...] ОПИСАНИЕ: Команда compact компрессирует перечисленные файлы. Если имена файлов не указаны, компрессируется информа- ция, поступающая из стандартного файла ввода, резуль- тат выдается в стандартный файл вывода. Как только считывается очередной байт, он немедленно кодируется в соответствии с текущим кодом. Этот код представляет собой оптимальный код Хаффмана для набора частот, вы- численных по уже введенной информации. Нет необходи- мости в добавлении к сжатому файлу дерева декодирова- ния, поскольку шифратор (compact) и дешифратор (uncompact) начинают работать с одного и того же сос- тояния и остаются синхронными. Более того, compact и uncompact могут работать в качестве фильтров. В частности, ... | compact | uncompact | ... Работает как очень медленная команда, не выполняющая никакой операции. Если указан параметр "файл", этот файл сжимается и ре- зультат помещается в файл с именем "файл.C", "файл" удаляется. Последние два байта сжатого файла (".C") 62 АПК 00210-01 33 01-4 указывают, что этот файл сжат. Этот код используется для предотвращения повторной компрессии. Ожидаемая степень сжатия зависит от типа исходного файла. Типичные значения степени сжатия следующие: 38% текст; 43% исходная программа на паскале; 36% исходная программа на языке Си; 19% модуль загрузки. Эти значения представляют собой процент байтов, на ко- торые уменьшен файл. ЗАМЕЧАНИЯ: Последняя часть имени файла должна содержать менее 13-ти символов, чтобы оставалось место для суффикса ".C". Каталоги не могут (и не должны) сжиматься. ДИАГНОСТИКА: Команда compact не сжимает каталоги. Выдаются также сообщения о файлах, которые не могут быть открыты, и т.п. ФАЙЛЫ: Создаваемые файлы имеют суффикс ".C". Исходные файлы удаляются (если они не были защищены). ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: uncompact, ccat 63 АПК 00210-01 33 01-4 ИМЯ: convert - преобразователь об'ектного кода ОС ЕС в a.out ФОРМАТ: convert [-e] файл1 файл2 ОПИСАНИЕ: Команда convert служит для преобразования об'ектного кода в "файл1" из формата ОС ЕС в об'ектный код форма- та ДЕМОС "файл2". -e флаг устанавливает при преобразовании перекоди- ровку кода ДКОИ в КОИ-8 для символьных имен сло- варя внешних имен ESD. Символы имени, кроме того, преобразуются в строчные буквы. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: a.out ЗАМЕЧАНИЯ: 1. Правильнее использовать "файл2" в качестве о.тип для обработки его редактором связей. 2. Не обрабатываются внешние фиктивные секции DSECT команды ассемблера DXD. 3. Не обрабатываются слабые внешние имена операто- ров ассемблера WXTRN. 4. Не обрабатывается об'ектная карта SYM. 64 АПК 00210-01 33 01-4 5. Не поддерживается операционное перемещение. 65 АПК 00210-01 33 01-4 ИМЯ: cp - создать копию файла. ФОРМАТ: cp [-i] файл1 файл2 cp [-i] файл ... справочник ОПИСАНИЕ: "Файл1" копируется в "файл2". Если "файл2" существует, режим и владелец сохраняются, в противном случае ис- пользуется режим исходного файла. Вторая форма данной команды копирует один или несколь- ко указанных файлов в "справочник" с исходными имена- ми. Команда cp отвергает запрос на копирование файла в са- мого себя. Если задан параметр -i и копирование производится в уже существующий файл, от пользователя требуется подтверждение. Если пользователь подтверждает запрос, выдавая ответ "y", команда cp продолжает работу. При выдаче любого другого символа предыдущее содержимое файла сохраняется. ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: cat, pr, mv 66 АПК 00210-01 33 01-4 ИМЯ: crypt - зашифровать/расшифровать. ФОРМАТ: crypt [ключ] ОПИСАНИЕ: Команда crypt осуществляет чтение из стандартного файла ввода и запись в стандартный файл вывода. Аргу- мент "ключ" представляет собой ключ, который задает конкретное преобразование информации. Если "ключ" не задан, команда crypt требует ввод ключа с терминала, не выдавая символов на экран терминала во время ввода ключа. Две команды crypt с одним и тем же значением ключа (ключ1): crypt ключ1 <исходный >зашифрованный crypt ключ1 <зашифрованный | pr зашифруют исходный файл и, расшифровав, распечатают исходный текст. Файлы, зашифрованные с помощью crypt, совместимы с теми файлами, с которыми работает редактор ed в режиме шифрования. Защита зашифрованных файлов основана на трех факторах: 1) лежащий в основе метод должен быть трудным для разгадки; 67 АПК 00210-01 33 01-4 2) прямой просмотр пространства ключей должен быть невозможен; 3) обходные пути, позволяющие получить ключи или исходный текст, должны быть минимизированы. Команда crypt реализует однороторную шифровальную ма- шину с 256-элементным ротором. Методы борьбы с такими машинами известны, однако не очень широко. Более того, для расшифровки необходимо проделать достаточно боль- шую работу. Преобразование ключа во внутренние установки машины умышленно сделано сложным. Однако, если ключи ограни- чены, например, тремя малыми буквами, зашифрованные файлы могут быть прочитаны с затратами не более пяти минут машинного времени. Поскольку ключ является параметром команды crypt, он является потенциально видимым для пользователей, вы- полняющих команду ps или ее производную. Для уменьше- ния этой возможности crypt разрушает любую запись клю- ча сразу же после входа. Несомненно, выбор ключей и их защищенность представляют собой наиболее уязвимое место. ФАЙЛЫ: /dev/tty для напечатанного ключа ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ: ed, makekey 68 АПК 00210-01 33 01-4 ИМЯ: csh - интерпретатор командного языка с Си-подобным синтаксисом. ФОРМАТ: csh [-cefinstvVxX] [параметр...] ОПИСАНИЕ: Команда csh представляет собой интерпретатор командно- го языка CSHELL, который, в отличие от языка SHELL, имеет более широкий набор встроенных команд, поддержи- вает некоторый контекст работы и имеет Си-подобный синтаксис. Функционирование csh начинается с выполнения командно- го файла ".cshrc" в регистрационном справочнике поль- зователя. Если csh используется в качестве интерпрета- тора основного командного языка, при регистрирации в системе выполняется командный файл ".login" в том же справочнике. После этого интерпретатор начинает считы- вать команды с терминала, выдавая в качестве подсказки символ "%". При завершении работы выполняется ко- мандный файл ".logout" в регистрационном справочнике пользователя. ЛЕКСИЧЕСКАЯ СТРУКТУРА: Командой в языке CSHELL считается набор параметров. Параметром является произвольная последовательность символов, не содержащая символов пробела, табуляции и 69 АПК 00210-01 33 01-4 новой строки. Первый параметр в строке рассматривается как имя команды, которую необходимо выполнить. Существует набор символов, которые имеют специальное значение в языке CSHELL, и обрабатываются особым обра- зом. Такие символы в дальнейшем будут называться мета- символами. К их числу относятся "&", "|", ";", "<", ">", "(", ")", "*" и некоторые другие. В неинтерактивном режиме символ "#" указывает на нача- ло комментария. Он теряет свое специальное значение при использовании любого из существующих механизмов экранирования. КОМАНДЫ: Простая команда представляет собой последовательность слов, первое из которых - имя выполняемой команды, а остальные передаются в качестве параметров. Последова- тельность простых команд, разделенных символами "|", образует канал межпроцессной связи (вывод предыдущей команды является вводом следующей). Цепочки команд, образующих межпроцессные каналы (конвейеры), могут разделяться с помощью символа ";", при этом они выпол- няются последовательно. В фоновом режиме, когда после- довательность команд завершается символом "&", csh может не дожидаясь окончания трансляции перейти к вы- полнению следующей команды. В таком режиме существует автоматическая защита от сигнала останова; следова- тельно, нет необходимости в использовании команды 70 АПК 00210-01 33 01-4 "nohup". Список команд, заключенный в скобки (), рассматривает- ся как простая команда, которая может являться частью конвейера. Символы "||" и "&&", используемые в ка- честве разделителей, указывают (как и в языке Си), что второй конвейер должен запускаться только в случае за- вершения первого. МЕХАНИЗМ ПОДСТАНОВКИ ПРЕДШЕСТВУЮЩИХ КОМАНД: Csh запоминает командные строки, которые вводил поль- зователь в процессе работы, и позволяет осуществлять их повторный ввод. Указателем выполнения подстановки команд является символ "!". Подстановка может начинаться в любом месте входного потока. Символ "!" теряет свое специальное значение, если он экранирован с помощью символа " также если за ним следует пробел, знак табуляции, символ новой строки, "=" или "(". Подстановка команд производится также в том случае, когда входная строка начинается символом "^". Команды нумеруются последовательно, начиная с 1. Коли- чество запоминаемых csh командных строк определяется переменной history. Ссылки на предыдущие команды из текущей команды могут быть осуществлены следующим об- разом: !N по номеру команды; 71 АПК 00210-01 33 01-4 !-n на n команд раньше относительно текущей команды; !c по первой букве команды; !?...?! по строке "...", содержащейся в некотором слове команды; !! повторное выполнение последней команды. Для выбора из команды отдельных параметров, после спе- цификации команды нужно указать ":" и определитель требуемых параметров. Слова входной строки нумеруются, начиная с 0: 0 - обычно имя команды, 1 - первый пара- метр и т.д. Основными определителями являются: 0 имя команды; n n-ый параметр; ^ первый параметр; $ последний параметр; % слово, которое соответствует (непосредственно предшествующему) образцу ?...?; х-y диапазон слов; -y соответствует "0-y";27 * выбрать все параметры, начиная с первого ("%-$"); х* выбрать все параметры, начиная с n-го ("х-$"); 72 АПК 00210-01 33 01-4 х- то же, что "х*", но не включая последний параметр "$". Символ ":" может быть опущен, если определитель начи- нается одним из символов "^", "$", "*", "-" или "%". После необязательного определителя могут указываться модификаторы. Каждому из них предшествует двоеточие ":". Определены следующие модификаторы: g применить модификацию во всех словах; h удалить имя файла, оставляя имена справочников, ведущих к нему; р распечатать новую команду, но не выполнять ее; q заключить модифицируемое слово в кавычки, пре- дотвращая его дальнейшую модификацию; r удалить расширение имени файла, указанное через точку "."; s/l/r заменить l на r. В качестве разделителя вместо "/" может быть использован любой символ.В стро- ках l и r разделитель должен экранироваться символом " ся предыдущая строка либо из l, либо из строки контекстуального поиска s в "!?s?". Если строка r пуста, то l удаляется; t удалить имена всех справочников, ведущих к файлу, оставляя имя файла; 73 АПК 00210-01 33 01-4 x то же, что и q, но разбить на слова в местах наличия пробелов, знаков табуляции и символов новой строки; & повторить предыдущую модификацию. Csh ппредоствляет удобный способ модификации последней строки. Для этих целей используется конструкция "^об- разец^замена". ПСЕВДОНИМЫ: С помощью команд alias и unalias интерпретатор csh составляет список псевдонимов, которые могут устанав- ливаться, отображаться и модифицироваться. После прос- мотра командной строки она разбивается на отдельные команды, и первое слово каждой команды проверяется (слева направо), чтобы выяснить, имеет ли оно псевдо- ним. Если имеет, то текст, который является псевдони- мом данной команды, считывается с помощью механизма history так, как если бы эта команда была предыдущей входной строкой. Полученные слова заменяют команду и список параметров. Этот механизм позволяет вводить новый синтаксис команд. ПОДСТАНОВКА ПЕРЕМЕННЫХ: После подстановки псевдонимов и грамматического разбо- ра входной строки и перед выполнением каждой команды производится подстановка переменных, обозначаемая сим- волом "$". 74 АПК 00210-01 33 01-4 Существуют следующие конструкции: $имя ${имя} Подставить значение переменной. Фигурные скобки отделяют "имя" от символов, которые к нему не относятся. Имена переменных могут содержать до 20 букв и символов подчеркивания; $имя[селектор] ${имя[селектор]} Подставить значение слова, выбранного "селекто- ром" из множества значений переменной "имя"; $#имя ${#имя} Подставить количество слов, хранящихся в пере- менной; $0 Подставить имя стандартного файла ввода. Если это имя неизвестно, возникает ошибка; $число ${число} Эквивалентно "$argv [число]"; $* Эквивалентно "$argv [*]"; С помощью модификатора ":" не могут быть произведены 75 АПК 00210-01 33 01-4 следующие подстановки: $?имя ${?имя} Подставить "1", если "имя" определено, или "0" - если не определено. $?0 Подставить "1", если стандартный файл ввода оп- ределен, или "0" - в противном случае. $$ Подставить номер процесса csh. ПОДСТАНОВКА ВЫВОДА КОМАНД: При подстановке команды, ее заключают в обратные апострофы `...`. Эта команда выполняется, а ее стан- дартный вывод разбивается на отдельные слова в местах наличия пробелов, знаков табуляции и символов новой строки, причем пустые слова отбрасываются, и этот текст затем заменяет исходную строку в "`". Внутри строк, заключенных в кавычки "...", только символ новой строки выделяет новые слова.Пробелы и символы табуляции сохраняются. При помощи подстановки вывода команды может быть соз- дана только часть слова, даже если команда выдает це- лую строку. ПОДСТАНОВКА ИМЕН ФАЙЛОВ: Если слово содержит любой из символов "*", "?", "[", 76 АПК 00210-01 33 01-4 "{" или начинается с "^ ", то в нем может быть осу- ществлена подстановка имени файла. При этом данное слово является образцом, который заменяется соот- ветствующим списком файлов, отсортированных в алфавит- ном порядке. Если в списке имен файлов не найдено ни одного соответствия заданному образцу, возникает ошиб- ка. Следующие символы имеют специальное значение: * Соответствует любой последовательности символов, в том числе пустой; ? Соответствует любому одиночному символу; [...] Соответствует любому из перечисленных символов. Пара символов, разделенная знаком "-", соот- ветствует любому символу из указанного лексичес- кого промежутка; ~ Регистрационный справочник, являющийся значением переменной home; ~имя Регистрационный справочник пользователя с именем "имя"; [a,b,...,n] Соответствует любому из перечисленных символов. Для указания самих символов "[" и "]" в списке перед ними должен ставиться символ " a{b,c,d}e 77 АПК 00210-01 33 01-4 Соответствует "abe ace ade". Использование пробе- лов не допускается. При подборе имен файлов символ ".", находящийся в на- чале имени файла или непосредственно после "/", а также символ "/" должны быть указаны явно и точно на своих местах. ВВОД/ВЫВОД Для задания файлов ввода/вывода используются следующие конструкции: <имя Использовать файл "имя" в качестве стандартного файла ввода; <<слово Считать ввод интерпретатора до строки, которая идентична указанному "слову". Полученный времен- ный файл использовать в качестве стандартного файла ввода; >имя >!имя >&имя >&!имя Использовать файл "имя" в качестве стандартного файла вывода. Содержимое файла усекается до ну- левой длины. Если определена переменная noclobber, файл не должен существовать, иначе 78 АПК 00210-01 33 01-4 возникает ошибка. Для предотвращения непреднаме- ренного разрушения файлов используются конструк- ции с "!". Конструкции, использующие "&", нап- равляют в стандартный файл вывода также диагнос- тические сообщения; >>имя >>&имя >>!имя >>&!имя Использовать файл "имя" в качестве стандартного файла вывода; выходная информация дописывается к содержимому файла "имя". Если определена пере- менная noclobber, а файл не существует, то ис- пользование конструкций, не содержащих "!", приводит к возникновению ошибки. В фоновом режиме стандартным файлом вывода по умолча- нию является пустой файл "/dev/null". Диагностика может быть выведена по каналу межпроцессной связи. Для этого используется конструкция "|&". ВЫРАЖЕНИЯ: Некоторые из встроенных команд могут содержать выраже- ния, в которых имеются операции, аналогичные операциям в языке Си, с таким же приоритетом. Эти выражения могут появляться в командах @, exit, if и while. Раз- решены следующие операции: "||", "&&", "|", "~", "&", 79 АПК 00210-01 33 01-4 "==", "!=", "<=", ">=", "<", ">", "<<", ">>", "+", "-", "*", "/", "%", "!", "^", "(", ")". Старшинство операций в этом ряду возрастает слева нап- раво; внутри следующих групп операции имеют одинаковый приоритет: == != <= >= < > << >> + - * / % В операциях сравнения "==", "!=", операндами являются строки; остальные оперируют с числами. Логическими значениями являются: 0 - "ложь", 1 (или любое число, отличное от нуля) - "истина". Все знаки операций должны отделяться от операндов пробелами. В одном сло- ве не должны встречаться два компонента выражений, за исключением случаев использования следующих знаков операций: "&", "|", "<", ">", "(", ")". Имеющиеся в csh операции присваивания аналогичны опе- рациям присваивания языка Си. К ним относятся: "=", "+=", "-=", "*=", "/=", "%=". Постфиксные операции "++" и "--" соответственно инкре- ментируют и декрементируют "имя" (например, "@i++"). В качестве простых операндов в выражениях могут ис- пользоваться команды, заключенные в фигурные скобки 80 АПК 00210-01 33 01-4 "{...}". В csh имеются операции опроса свойств файла вида "-l имя", где l может принимать следующие значения: r разрешение чтения; w разрешение записи; х разрешение выполнения; е существование; о владелец; z нулевой размер; f незашифрованный файл; d справочник. В указанном файле осуществляются подстановки перемен- ных и имен файлов. Если файл обладает требуемым свойством, то возвращается значение 1 (истина), иначе - 0 (ложь). КОМАНДЫ УПРАВЛЕНИЯ: К командам управления относятся следующие конструкции: foreach имя (слово ...) список_команд end Переменной "имя" последовательно присваиваются значения "слово ..." и выполняется "список_ко- манд". switch( строка ) 81 АПК 00210-01 33 01-4 case слово: ... breaksw ... default: ... breaksw endsw "Строка" последовательно сравнивается со всеми "словами". Если соответствие не обнаружено, вы- полнение продолжается после default. Команда breaksw приводит к тому, что выполнение продол- жается после endsw. if( выр1 ) then список_команд1 else if( выр2 ) then список_команд2 else список_команд3 endif Если значение первого выражения истинно (отлично от нуля), выполняется "список_команд1". В про- тивном случае проверяется "выражение2": если оно истинно, выполняется "список_команд2" и т.д. while( выражение ) ... end Цикл выполняется, пока истинно значение "выраже- 82 АПК 00210-01 33 01-4 ния". В операторах управления csh ключевое слово (if, else и др.) должно быть первым слово в строке. ВСТРОЕННЫЕ КОМАНДЫ: alias alias имя alias имя список_слов Первая форма распечатывает все псевдонимы. Вто- рая форма распечатывает псевдоним указанного "имени". Последняя форма определяет "спи- сок_слов" как псевдоним "имени". В "списке_слов" осуществляется подстановка команд и имен файлов. В качестве "имен" нельзя использовать "alias" и "unalias". alloc Выдает размер используемой динамической памяти, включая используемую и свободную память, а также адрес последней ячейки памяти. break Вызывает возобновление выполнения после end бли- жайшей внешней конструкции foreach или while. Если в одной строке указывается несколько команд break, разделенных точкой с запятой, то переход осуществляется через столько же уровней. breaksw Вызывает выход из команды switch, возобновляя 83 АПК 00210-01 33 01-4 выполнение после endsw. case метка: "Метка" - один из вариантов оператора switch. cd cd имя chdir chdir имя заменяет текущий справочник на справочник "имя". Если параметр отсутствует, то по умолчанию при- нимается регистрационный справочник. continue Продолжает выполнение ближайшего внешнего while или foreach. Остальные команды текущей строки выполняются. default: Метка, обозначающая вариант по умолчанию в опе- раторе switch.Должна располагаться после всех меток case. echo список_слов Указанные слова записываются в стандартный файл вывода. Символ " на новую строку. else end endif 84 АПК 00210-01 33 01-4