Интерпретатор командного языка shell. Основные понятия языка shell
1. Основные понятия языка
shell
1.1. Ввод-вывод
Три направления ввода-вывода
являются выделенными - стандартный
ввод, стандартный вывод и
стандартный протокол. Как правило,
команды берут исходные данные из
стандартного ввода и помещают
результаты в стандартный вывод.
Стандартные ввод, вывод и
протокол можно переназначить.
Обозначение
< <имя файла>
служит для переназначения
стандартного ввода (дескриптор
файла 0),
> <имя файла>
для стандартного вывода
(дескриптор файла 1);
<< <строка>
ввод происходит со стандартного
ввода, пока не встретится указанная
<строка> или конец файла,
>> <имя файла>
для стандартного вывода; если
файл существует, то выводимая
информация добавляется к конец
этого файла,
<& <цифра>
в качестве стандартного ввода
об(r)является файл, ассоциированный
с дескриптором <цифра>;
аналогично для стандартного вывода
>& <цифра>
<&- и >&-
закрывают соответственно
стандартный ввод и вывод.
Если любой из этих конструкций
предшествует цифра, то с указанным
файлом будет ассоциирован
дескриптор, равный указанной цифре,
вместо 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 ждет его
завершения. Если & - то не ждет.
Роль ; может играть конец строки.
Смысл конвейера в том, что
стандартный вывод одной команды
замыкается на стандартный ввод
другой. Пример конвейера -
подсчитать число об(r)ектных файлов
в текущем каталоге.
ls *.o | wc -l
1.4. Метасимволы, генерация имен
файлов
Метасимволы - символы, имеющие
специальное значение для
интерпретатора :
? * ; & ( ) | ^ < > <пробел> <табуляция> <возврат_каретки>
Однако каждый из этих символов
может представлять самого себя,
если перед ним стоит . Все символы,
заключенные между кавычками ' и ',
представляют самих себя. Между
двойными кавычками (")
выполняются подстановки команд (см
п. 2.2) и параметров (см. п. 2.3), а
символы , `," и $ могут
экранироваться предшествующим
символом .
После всех подстановок в каждом
слове команды ищутся символы *,?, и [.
Если находится хотя бы один из них,
то это слово рассматривается как
шаблон имен файлов и заменяется
именами файлов, удовлетворяющих
данному шаблону (в алфавитном
порядке). Если ни одно имя файла не
удовлетворяет шаблону, то он
остается неизменным. Значения
указанных символов:
* |
любая строка, включая
и пустую |
? |
один любой символ |
[...] |
любой из указанных
между ними символов. Пара
символов, разделенных знаком -,
означает любой символ, который
находится между ними, включая и
их самих. Если первым символом
после "[" идет "!", то
указанные символы не должны
входить в имя файла |
Содержание | Вперед
|