Образец "*" соответствует любой строке.

if список_команд1
then список_команд2
[elif список_команд3 then список_команд4]
[else список_команд5]

Если код завершения "списка_команд1" равен нулю,
выполняется "список_команд2", иначе - "спи-
сок_команд3" и, если его код завершения равен
нулю, выполняется "список_команд4". В противном
случае выполняется "список_команд5".

132
AПK.00210-01 33 01-5

while список_команд1
[do список_команд2]
done

Если код завершения "списка_команд1" равен нулю,
выполняется "список_команд2" и цикл повторяется,
иначе - выполнение цикла заканчивается.

until список_команд1
[do список_команд2]
done

Если код завершения "списка_команд1" не равен
нулю, выполняется "список_команд2" и цикл повто-
ряется, иначе - выполнение цикла заканчивается.

(список_команд)
Выполнить "список_команд", запустив sh в ка-
честве подпроцесса.

{список_команд;}
выполнить "список_команд".

К зарезервированным словам интерпретатора sh относятся
следующие слова: "if", "then", "else", "elif", "fi",
"case", "in", "esac", "for", "while", "until", "do",
"done", "{", "}". Они распознаются только в том слу-
чае, если являются первым словом команды и не заключе-
ны в кавычки.

ПОДСТАНОВКА РЕЗУЛЬТАТОВ ВЫПОЛНЕНИЯ КОМАНД:

133
AПK.00210-01 33 01-5

Если команда заключена в обратные апострофы (``), она
выполняется и замещается в командной строке результа-
том своего выполнения. Этот результат может использо-
ваться как часть слова или как целое слово; символы
новой строки отбрасываются.

ПОДСТАНОВКА ЗНАЧЕНИЙ ПАРАМЕТРОВ:

Символ "$" указывает на выполнение подстановки значе-
ний параметров. Команда set присваивает значения пози-
ционным параметрам. Переменные устанавливаются следу-
ющим образом:

имя = значение [имя = значение] ...

${параметр}
"Параметр" может быть трех видов: 1) последова-
тельность букв, цифр или символов подчеркивания
(т.е. определенное "имя"), 2) цифра, 3) один из
символов * @ # ? - $ !. В результате выполнения
данного макровызова осуществляется подстановка
значения параметра (если оно определено). Фигур-
ные скобки используются только в том случае, ес-
ли после "параметра" следует буква, цифра или
символ подчеркивания, не являющиеся частью его
имени. Если "параметр" представляет собой цифру,
то он считается позиционным. Если "параметром"
является символ * или @, подставляются значения
всех позиционных параметров (кроме 0), разделен-

134
AПK.00210-01 33 01-5

ные пробелами.

${параметр-слово}
Если "параметр" определен, подставить его значе-
ние, иначе подставить "слово".

${параметр=слово}
Если "параметр" не определен, присвоить ему зна-
чение "слова" и выполнить подстановку этого зна-
чения. Значения позиционных параметров таким
способом определяться не могут.

${параметр?слово}
Если "параметр" определен, подставить его значе-
ние; иначе напечатать "слово" и прекратить вы-
полнение командного файла. Если "слово" от-
сутствует, печатается стандартное диагностичес-
кое сообщение.

${параметр+слово}
Если "параметр" определен, подставить "слово", в
противном случае ничего не подставлять.

В приведенных конструкциях команда, определяемая
"словом", не будет выполняться, если "слово" не явля-
ется подставляемым значением. (Таким образом, в приме-
ре "echo {d-`pwd`}" команда pwd будет выполняться
только в том случае если параметр d не определен).

Следующие "параметры" автоматически определяются ин-
терпретатором sh:


135
AПK.00210-01 33 01-5

# Количество позиционных параметров;

- Ключи, которые вводятся при вызове или с помощью
команды set;

? Код завершения последней выполненной команды;

$ Номер текущего процесса;

! Номер процесса последней фоновой команды.

Следующие "параметры" используются, но не определяются
интерпретатором:

HOME Параметр содержит полное имя справочника (по
умолчанию - имя регистрационного справочника)
для команды cd, вызываемой без параметров;

PATH Список имен справочников, в которых производится
поиск команд, отсутствующих в текущем справочни-
ке;

MAIL Если эта переменная определяет имя файла для
приема почты, то sh будет информировать пользо-
вателя о поступлении почты в указанный файл;

PS1 Подсказка интерпретатора при вводе команды, по
умолчанию "$";

PS2 Подсказка интерпретатора для продолжения ввода
(если команда не была завершена на предыдущей
строке), по умолчанию ">";

136
AПK.00210-01 33 01-5

IFS Символы-разделители командной строки; обычно
пробел, знак табуляции и символ новой строки.

ИНТЕРПРЕТАЦИЯ РАЗДЕЛИТЕЛЕЙ:

В строках, полученных после подстановки значений пара-
метров и результатов выполнения команд, осуществляется
поиск символов-разделителей (определенных в $IFS). В
местах нахождения таких символов строки разбиваются на
отдельные параметры. Пустые параметры, определенные
явно (" " или ' '), сохраняются. Пустые строки, полу-
ченные в результате выполнения параметров, у которых
нет значений, отбрасываются.

ГЕНЕРАЦИЯ ИМЕН ФАЙЛОВ:

После подстановок и интерпретации символов-
разделителей в каждом слове команды осуществляется
поиск символов *, ?, и [. Если встречается один из
этих символов, то данное слово считается образцом и
заменяется соответствующим списком имен файлов, распо-
ложенных в алфавитном порядке. Если образцу не соот-
ветствует ни одно из указанных имен файлов, то это
слово остается неизменным. Символ "." в начале имени
файла должен указываться явно.

* Соответствует любой строке, в том числе пустой;

? Соответствует любому одиночному символу;

[...] Соответствует любому из перечисленных символов.

137
AПK.00210-01 33 01-5

Пара символов, разделенная символом "-", соот-
ветствует любому символу из указанного лексичес-
кого промежутка.

ЭКРАНИРОВАНИЕ:

Следующие символы имеют специальное значение для ин-
терпретатора sh и вызывают прерывание выполнения ко-
манды, если они не были экранированы: ";", "&", "(",
")", "|", "<", ">", новая_строка, пробел, табуляция.

Символ может быть экранирован, если ему предшествует
. Для записи длинных конструкций более чем в одной
строке, специальное значение символа новой строки "0
отменяется. Все символы, заключенные в апострофы ('
'), за исключением самого апострофа, являются экрани-
рованными. Подстановка значений параметров и результа-
тов выполнения команд выполняется внутри кавычек ("
"). Символ экранирует символы , `, " и $.

"$*" эквивалентно "$1 $2 ..."
"$@" эквивалентно "$1" "$2" ... .

ПОДСКАЗКИ:

В интерактивном режиме, перед считыванием команды, sh
печатает значение переменной PS1 (по умолчанию - $).
Если введенная строка содержит синтаксически незавер-
шенную конструкцию, то для продолжения ввода интерпре-
татор выдает в качестве подсказки значение переменной
PS2 (по умолчанию - символ >).


138
AПK.00210-01 33 01-5

ВВОД-ВЫВОД:

Для задания файлов ввода/вывода используются специаль-
ные конструкции. Они могут находиться в любом месте
простой команды. Перед использованием "слова" или
"цифры" выполняются все необходимые подстановки.

<слово
Файл "слово" назначается стандартным файлом вво-
да (дескриптор файла 0).

>слово
Файл "слово" назначается стандартным файлом вы-
вода (дескриптор файла 1). Если файл не су-
ществует, он создается; в противном случае он
усекается до нулевой длины.

>>слово
Файл "слово" назначается стандартным файлом вы-
вода. Если файл существует, выводимая информация
добавляется к его содержимому; в противном слу-
чае файл создается.

<<слово
Ввод осуществляется до тех пор, пока не встреча-
ется последовательность символов "слово". Полу-
ченный локальный файл является стандартным
файлом ввода. Если какой-либо символ "слова" эк-
ранирован, не производится никакой интерпретации
символов локального файла; в противном случае

139
AПK.00210-01 33 01-5

производится подстановка значений параметров и
результатов выполнения команд, символ новой
строки игнорируется, а знак используется
для экранирования символов , $, ` и первого
символа "слова".

<&цифра
Информация, записываемая в файл с дескриптором
"цифра", передается в стандартный файл вывода.

>&цифра
Стандартным файлом ввода является файл с
дескриптором "цифра".

<&- Стандартный файл ввода закрыт на запись.

>&- Стандартный файл вывода закрыт на чтение.

Если какой-либо из указанных конструкций предшествует
цифра, то дескриптор создаваемого файла определяется
этой цифрой (вместо 0 или 1 по умолчанию).

ВСТРОЕННЫЕ КОМАНДЫ:

Встроенные команды практически не отличаются по своим
своиствам от остальных команд системы, за исключением
того, что для них обычно нельзя переопределить стан-
дартные файлы ввода/вывода.

: Команда не производит никаких действий, за
исключением подстановки значений макроперемен-
ных. Код завершения равен нулю.


140
AПK.00210-01 33 01-5

. файл
Выполнить командный "файл" в рамках текущего
процесса.

cd [справочник]
Об'явить указанный "справочник" текущим. Если
параметр не задан, в качестве имени справочника
используется значение макропеременной HOME.

eval [команда ...]
Провести все макроподстановки и выполнить "ко-
манду ...".

exec [команда ...]
Текущий процесс заменить процессом выполнения
"команды ...". Допускается переопределение стан-
дартных файлов ввода/вывода.

exit [N]
Прерывание выполнения текущего процесса с кодом
завершения N. Если N отсутствует, код завершения
определяется кодом завершения последней выпол-
ненной команды.

export [имя...]
Указанные макропеременные автоматически вводятся
в среду выполняемых впоследствии команд. Если
параметры не заданы, выдается список имен
экспортируемых макропеременных.

login [пар ...]


141
AПK.00210-01 33 01-5

Регистрация пользователя в системе без создания
нового процесса (эквивалент команды "exec login
пар...").

newgrp [пар ...]
Замена текущего идентификатора группы пользова-
телей (эквивалент команды "exec newgrp пар...").

read имя ...
Из стандартного файла ввода считывается одна
строка. Затем макропеременным "имя ..." последо-
вательно присваиваются значения слов, составля-
ющих эту строку. Код завершения команды равен
нулю во всех случаях, кроме тех, когда список
параметров длиннее, чем число слов в считанной
строке.

readonly имя ...
Запрещается переопределение перечисленных
макропеременных. Если параметры не заданы, выда-
ется список всех макропеременных, определенных
как "readonly" (только для чтения).

set [-eknptuvx [пар ...]]
Устанавливает режимы работы интерпретатора sh.
Могут задаваться следующие ключи:

-e В неинтерактивном режиме вызывает немед-
ленное прерывание при обнаружении ошибки в
выполнении команды;

142
AПK.00210-01 33 01-5

-k Все определенные макропеременные экспорти-
руются в среду запускаемых процессов;

-n Производит только синтаксическую проверку
команд;

-t Прерывает выполнение процесса после того,
как будет считана и выполнена одна коман-
да;

-u Устанавливает режим диагностики ошибки при
попытке использовать неопределенные пере-
менные;

-v Устанавливает режим печати вводимых строк
по мере их считывания;

-x Распечатывает команды и их параметры по
мере выполнения;

- Отменяет ключи -x и -v.
Установленные ключи содержатся в макропеременной "-".
Остальным параметрам присваиваются значения позицион-
ных параметров "1, 2, ...". Если параметры не заданы,
печатается список значений всех макропеременных;

shift Позиционным параметрам "2, 3, ..." присваиваются
значения параметров "1, 2, ..." соответственно;

times Выдается время, затраченное пользователем и сис-
темой на выполнение процесса;

143
AПK.00210-01 33 01-5

trap [команда] [N ...]
При получении перечисленных сигналов выполняется
указанная "команда";

umask [ddd]
Маске создания файлов пользователя присваивается
восьмеричный код ddd . Если параметр ddd опущен,
выдается текущеее значение маски;

wait [n]
Ожидает окончания выполнения процесса с номером
n и присваивает его код завершения макроперемен-
ной "?".

ВЫЗОВ ИНТЕРПРЕТАТОРА:

Если первым символом параметра "0" является знак "-",
то команды считываются из файла .profile. При вызове
могут указываться следующие ключи:

-c строка
Команды считываются из "строки";

-s Команды считываются из стандартного файла ввода.
Сообщения интерпретатора записываются в стан-
дартный файл диагностик (файл с дескриптором 2);

-i Интерактивный режим работы интерпретатора.

ФАЙЛЫ:
$HOME/.profile
/tmp/sh*


144
AПK.00210-01 33 01-5

/dev/null

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
csh, test, exec

ДИАГНОСТИКА:
Ошибки, обнаруженные интерпретатором (например, син-
таксические ошибки), приводят к тому, что sh возвраща-
ет код завершения, не равный нулю. Если при этом режим
работы - неинтерактивный, то выполнение командного
файла прекращается. Если же режим работы интерактив-
ный, sh возвращает код завершения последней выполнен-
ной команды.










145
AПK.00210-01 33 01-5

ИМЯ:
size - сообщить размер об'ектного файла

ФОРМАТ:
size [обфайл...]

ОПИСАНИЕ:
Команда size печатает (десятичное) число байтов, зани-
маемое текстовым сегментом, сегментом данных и bss, а
также их сумму в десятичном и восьмеричном коде для
каждого об'ектного файла "обфайл", указанного в пара-
метрах.









146
AПK.00210-01 33 01-5

ИМЯ:
sleep - задержать выполнение на заданный интервал

ФОРМАТ:
sleep время

ОПИСАНИЕ:
Команда sleep задерживает выполнение на "время"
секунд. Она используется для выполнения команды через
определенный промежуток времени, например:

(sleep 105; команда)

или для выполнения команды время от времени, например,

while true
do
команда
sleep 37
done

ЗАМЕЧАНИЯ:
"время" должно быть меньше 2 147 483 647 секунд.






147
AПK.00210-01 33 01-5

ИМЯ:
soelim - фильтр для текстовых файлов в формате pif.

ФОРМАТ:
soelim [файл...]

ОПИСАНИЕ:
Команда переписывает файлы (по умолчанию стандартный
файл ввода) в стандартный файл вывода, заменяя дирек-
тивы pif вида:

.so некоторый_файл

содержимым указанных файлов. Поскольку такие програм-
мы, как tbl, обычно не делают этого, команда soelim
необходима, когда требуется располагать отдельные таб-
лицы документа в различных файлах.

Заметьте, что это включение может подавляться пос-
редством использования "'" вместо ".", т.е.

'so /usr/lib/tmac.s

Пример использования команды soelim:

soelim exum?.n | tbl | pif -ms | col | lpr

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
colcrt, more

ЗАМЕЧАНИЯ:
Перед именем файла должен быть ровно один пробел, а
после него не должно быть пробелов.


148
AПK.00210-01 33 01-5

ИМЯ:
sort - сортировка и слияние файлов

ФОРМАТ:
sort [-mubdfinrtxz] [ +поз1 [-поз2] ]...
[-o имя] [-T справочник] [имя]...

ОПИСАНИЕ:
Команда sort сортирует совместно строки всех указанных
файлов и записывает результат в стандартный файл выво-
да. Если входные файлы не заданы (или указан ключ
"-"), сортируется информация из стандартного файла
ввода.

По умолчанию при сортировке рассматривается вся стро-
ка. Стандартным порядком сортировки является афлавит-
ный (для букв русского и латинского алфавита) и лекси-
кографический побайтный в соответствии с численными
значениями кодов КОИ-8 (для всех остальных символов).
Для изменения правил сортировки используется ключ, ко-
торый может содержать следующие символы:

b Игнорировать ведущие пробелы и символы табуляции
при сравнении полей;

d "Словарный порядок": при сравнении учитываются
только буквы, цифры и пробелы;

f Не различать строчные и прописные буквы;

i Игнорировать символы КОИ-8 с кодами вне диапазо-

149
AПK.00210-01 33 01-5

нов 040-0176 и 0300-0376 при текстовых сравнени-
ях;

n Строки начинающиеся с чисел (возможно с пред-
шествующими пробелами), сортируются по арифмети-
ческому значению. Ключ "n" подразумевает уста-
новку ключа "b";

r Изменить порядок сортировки на обратный;

tx "Символом табуляции", разделяющим поля, является
символ "x";

z Сортировать в соотвествии с численным значением
байтов.

Запись "+поз1 -поз2" определяет часть строки, которая
рассматривается при сортировке. Сортировка начинается
с позиции "поз1" и заканчивающимся перед позицией
"поз2". Каждый из параметров "поз1" и "поз2" имеет вид
"m.n", после чего могут следовать один или несколько
флагов bdfinr, причем m означает количество полей, ко-
торое должно быть пропущено с начала строки, а n озна-
чает количество символов, которое должно быть пропуще-
но после этого. Если присутствуют какие-либо флаги,
они отменяют глобальные ключи упорядочивания для
данной части строки. Если действует ключ "b", "n"
отсчитывается от первого (отличного от пробела) симво-
ла поля; "b" добавляется независимо к "поз2".
Отсутствие ".n" означает ".o", отсутствие "поз2" озна-

150
AПK.00210-01 33 01-5

чает конец строки. При наличии ключа "-tx" полями счи-
таются последовательности символов, разделяемые симво-
лом "x", если ключ "-tx" не задан в качестве полей
рассматриваются последовательности отличных от
пробелов символов, разделенные пробелами.

Если имеются несколько ключей сортировки, последующие
ключи сравниваются только после того, как предыдущие
ключи оказались равны. Строки, которые при сравнении
оказались равны, упорядочиваются с учетом всех байтов.

Распознаются также следующие необязательные параметры:

c Проверить, является ли входной файл отсортиро-
ванным в соответствии с заданными правилами
упорядочивания; не выдавать результат, если файл
не отсортирован;

m Только слияние, входные файлы уже отсортированы;

o Следующий параметр представляет собой имя выход-
ного файла, который должен использоваться вместо
стандартного файла вывода. Этот файл может сов-
падать с одним из входных файлов;

T Следующий параметр представляет собой имя спра-
вочника, в котором должны создаваться временные
файлы;

u Из каждой группы одинаковых строк оставить
только одну. Игнорируемые байты и байты вне клю-

151
AПK.00210-01 33 01-5

чей не участвуют в сравнении.

ПРИМЕРЫ:
Выдать в алфавитном порядке все различные слова в
файле "список". Слова с прописными буквами отличаются
от слов со строчными буквами.

sort -u +0f +0 список

Выдать содержимое файла /etc/passwd, отсортированное
по номерам идентификаторов пользователей (третье из
разделенных двоеточиями полей):

sort -t: +2n /etc/passwd

Выдать первое вхождение каждого месяца в уже отсорти-
рованном файле (dates). Ключи "-um" с единственным
входным файлом обеспечивают выбор представителя из
каждой группы одинаковых строк.

sort -um +0 -1 dates

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
uni, comm, rev, join

ДИАГНОСТИКА:
Выдается сообщение и ненулевой код возврата при раз-
личных ошибочных ситуациях и при неупорядоченности,
обнаруженной при наличии ключа "-c".

ЗАМЕЧАНИЯ:
Слишком длинные строки усекаются без предупреждения.

152
AПK.00210-01 33 01-5

ИМЯ:
split - разбить файл на части

ФОРМАТ:
split [-n] [файл [имя]]

ОПИСАНИЕ:
Команда split считывает "файл" и разбивает его на
файлы, содержашие по n строк исходного файла каждый
(по умолчанию - 1000). Если исходный файл содержит
число строк не кратное n, последний результирующий
файл может быть короче. Имя первого выходного файла
представляет собой "имя" с добавкой "aa", и так далее
в лексикографическом порядке. Если выходное имя не за-
дано, по умолчанию принимается х.

Если входной файл не указан или вместо него указывает-
ся "-", используется стандартный файл ввода.








153
AПK.00210-01 33 01-5

ИМЯ:
st - выдать на дисплей информацию о состоянии задания
ОС ЕС.

ФОРМАТ:
st [идвм] имя_задания

ОПИСАНИЕ:
Команда st посылает запрос ОС ЕС через ПДП для получе-
ния информации о состоянии задания, имя которого ука-
зано в параметре "имя_задания". Виртуальная машина
идентифицируется параметром "идвм", значение по умол-
чанию complex1.

Команда не снижает интерактивности работы за счет
того, что формирует запрос к ПДП в фоновом режиме, ко-
торый в свою очередь ожидает обратной связи в течении
минуты. Если за это время ответа из ПДП не поступает,
выдается диагностическое сообщение и команду st нужно
повторить вновь.

ФАЙЛЫ:
/dev/smsg?





154
AПK.00210-01 33 01-5

ИМЯ:
strip - удалить таблицу символов.

ФОРМАТ:
strip имя ...

ОПИСАНИЕ:
Команда strip удаляет таблицу символов и биты переме-
щения, которые обычно присоединяются к выводу ас-
семблера и редактора связей. Это полезно для экономии
места после того, как программа была отлажена.

Действие команды strip такое же, как использование
ключа "-s" в команде ld.

ДОПОЛНИТЕЛЬНЫЕ ССЫЛКИ :
ld







155
AПK.00210-01 33 01-5

ИМЯ:
stty - установить режим работы терминала.

ФОРМАТ:
stty [режим ...]

ОПИСАНИЕ:
Команда stty устанавливает определенные режимы вво-
да/вывода для терминала пользователя. При отсутствии
параметров она сообщает текущее состояние режима.
Командой устанавливаются следующие режимы:

even разрешить контроль по четности;

-even заблокировать контроль по четности;

odd разрешить контроль по нечетности;

-odd заблокировать контроль по нечетности;

Для полного отключения нужно указать "-even -odd".

raw режим непосредственного ввода (нет забоя (kill),
удаления (erase), прерывания (quit), конца пере-
дачи (EOT); бит контроля по паритету возвращает-
ся назад);

-raw отмена режима непосредственного ввода;

cbreak
делать каждый символ доступным read(2) по мере
поступления; нет забоя (kill) и удаления
(erase);


156
AПK.00210-01 33 01-5

-cbreak
делать символы доступными для read только после
получения символа новой строки;

-crmod
строки на экране заканчиваются только символами
новой строки;

crmod допускается употребление символа возврата карет-
ки (CR) вместо символа новой строки (NL); вместо
возврата каретки или новой строки выводятся сим-
волы возврат каретки - перевод строки (CR-NL);

echo отображать в эхо-режиме вводимый символ;

-echo не отображать символы в эхо-режиме;

lcase преобразовывать символы верхнего регистра в сим-
волы нижнего регистра;

-lcase
не выполнять преобразования регистра символов;

-tabs заменять при печати символы табуляции пробелами;

tabs сохранять символы табуляции;

cyrill
терминал имеет русские символы;

-cyrill
терминал не имеет русских символов;

157
AПK.00210-01 33 01-5

icyrill
режим работы клавиатуры (русский/латинский) ус-
танавливается от самой клавиатуры (Электроника
15 ИЭ 0013, клавиатура в "тестовом" режиме);

-icyrill
режим работы клавиатуры (русский/латинский) ус-
танавливается от линии (Электроника 15 ИЭ 0013,
клавиатура в "нормальном" режиме); Клавиатуру
рекомендуется переключать в "тестовый" режим.

dec установить символы забоя, удаления и прерывания
в стиле ОС RSX-11, RT-11: ("забой", <control>u,
<control>c).

ek то же, что "dec".

unix установить символы забоя, удаления и прерывания
в стиле ОС UNIX: ("#", "@", <забой>). Символом
"quit" устанавливается <control> .

erase c
рассматривать символ c как символ уничтожения.
Символ уничтожения может также иметь вид ^x, что
аналогично <ctrl>x;

kill c
рассматривать символ c как символ забоя строки.
Здесь также действительна форма ^х;

intr c

158
AПK.00210-01 33 01-5

рассматривать символ c как символ прерывания
"interrupt". Здесь также действительна форма
^х;

quit c
рассматривать символ c как символ прерывания с
созданием образа памяти "core". Здесь также дей-
ствительна форма ^х;

nl cr ht vt n
установить задержку соответствующего движения
курсора на n тиков;

width n
установить ширину страницы (длину строки) в n