Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Открытые системы / Интерпретатор командного языка shell.doc
Скачиваний:
28
Добавлен:
10.05.2014
Размер:
141.31 Кб
Скачать

Интерпретатор командного языка shell

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

Оглавление

1. Основные понятия языка shell . . . . . . . . . . . . . .

1_1. Ввод-вывод . . . . . . . . . . . . . . . . . . . . . .

1_2. Синхронное и асинхронное выполнение команд . . . . . .

1_3. Конвейер . . . . . . . . . . . . . . . . . . . . . . .

1_4. Метасимволы, генерация имен файлов . . . . . . . . . .

2_ Синтаксис языка shell . . . . . . . . . . . . . . . . .

2_1. Комментарии . . . . . . . . . . . . . . . . . . . . .

2_2. Подстановка результатов выполнения команд . . . . . .

2_3. Переменные и подстановка их значений . . . . . . . . .

2_4. Специальные переменные . . . . . . . . . . . . . . . .

3_ Управляющие конструкции . . . . . . . . . . . . . . . .

3_1. Цикл ДЛЯ . . . . . . . . . . . . . . . . . . . . . . .

3_2. Оператор выбора . . . . . . . . . . . . . . . . . . .

3_3. Условный оператор . . . . . . . . . . . . . . . . . .

3_4. Цикл ПОКА . . . . . . . . . . . . . . . . . . . . . .

3_5. Функции . . . . . . . . . . . . . . . . . . . . . . .

3_6. Зарезервированные слова . . . . . . . . . . . . . . .

3_7. Специальные команды . . . . . . . . . . . . . . . . .

4_ Выполнение shell-программ . . . . . . . . . . . . . . .

4_1. Запуск shellа . . . . . . . . . . . . . . . . . . . .

4_2. Выполнение . . . . . . . . . . . . . . . . . . . . . .

4_3. Окружение . . . . . . . . . . . . . . . . . . . . . .

4_4. Сигналы . . . . . . . . . . . . . . . . . . . . . . .

4_5. Замечания . . . . . . . . . . . . . . . . . . . . . .

5_ Дополнительные сведения . . . . . . . . . . . . . . . .

5_1. Команда test . . . . . . . . . . . . . . . . . . . . .

5_2. Команда expr . . . . . . . . . . . . . . . . . . . . .

5_3. Команда ena . . . . . . . . . . . . . . . . . . . . .

* 1. Основные понятия языка shell *

1_1. Ввод-вывод

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

помещают результаты в стандартный вывод.

Стандартные ввод, вывод и протокол можно переназначить. Обозначение

< <имя файла>

служит для переназначения стандартного ввода (дескриптор файла 0),

> <имя файла>

для стандартного вывода (дескриптор файла 1);

<< <строка>

ввод происходит со стандартного ввода, пока не встретится указанная <строка> или конец файла,

>> <имя файла>

для стандартного вывода; если файл существует, то выводимая ин-

формация добавляется к конец этого файла,

<& <цифра>

в качестве стандартного ввода объявляется файл, ассоциированный

с дескриптором <цифра>; аналогично для стандартного вывода

>& <цифра>

<&- и >&-

закрывают соответственно стандартный ввод и вывод.

Если любой из этих конструкций предшествует цифра, то с

указанным файлом будет ассоциирован дескриптор, равный указан-

ной цифре, вместо 0 и 1 по умолчанию. Например,

2 > <имя файла>

для стандартного протокола используется дескриптор 2, а

2 >& 1

ассоциирует дескриптор 2 с файлом, ассоциированным с дескриптором 1.

... 2>protocol

переназначает стандартный протокол (дескриптор 2) в файл по имени protocol.

Чтобы переназначить стандартный протокол туда же, куда уже назначен стандартный вывод, следует употребить конструкцию

?... 2>&1

Важен порядок переназначения: shell производит переназначение слева направо по указанному списку. Так,

1 > xxx 2 >& 1

сначала ассоциирует дескриптор 1 с файлом xxx, а затем дескриптор 2 с 1, т.е. тоже с xxx. А

2 >& 1 1 > xxx

ассоциирует дескриптор 2 с терминалом, а 1 - с файлом xxx.

Можно переназначить системный ввод на текущий файл:

isql - - <

1_2. Синхронное и асинхронное выполнение команд

Обычно shell ждет завершения выполнения команды. Однако

имеется возможность запустить задачу в асинхронном режиме, т.е.

без ожидания ее завершения. Для этого после команды (после всех

ее аргументов и указаний о переназначении ввода-вывода) надо

поставить знак &. При этом по умолчанию стандартный ввод коман-

ды назначается на пустой файл /dev/null.

Пример: создать файл primer можно по команде

echo > primer

Еще пример: запустить программу prog в асинхронном режиме, что-

бы не надо было дожидаться его завершения, засечь время выпол-

нения, результаты программы направить в файл prog.res, данные о

времени выполнения - в файл prog.tim.

time prog > prog.res 2> prog.tim &

1_3. Конвейер

Конвейер - последовательность команд, разделенных знаком |.

Если после конвейера стоит ; shell ждет его завершения. Если &

- то не ждет. Роль ; может играть конец строки. Смысл конвейера

в том, что стандартный вывод одной команды замыкается на стан-

дартный ввод другой. Пример конвейера - подсчитать число объ-

ектных файлов в текущем каталоге.

ls *.o | wc -l