Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

8. Shell - интерпретатор командного языка

В этом разделе описаны команды и символы, имеющие специальное значение, которые позволяют:

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

8.1. Метасимволы

В табл. 20 приведены метасимволы, используемые shell.

Таблица 20
Метасимволы

Символ Функция
* ? [ ] Эти метасимволы позволяют указывать сокращенные имена файлов при поиске по шаблону
& Означает, что команда будет выполняться в фоновом режиме
; Точка с запятой разделяет команды в командной строке
\ Отменяет специальное значение символов, таких как *, ?, [, ], &, ;, <, >, |
'...' Одиночные кавычки отменяют значение пробела как разделителя и специальное значение всех символов
"..." Двойные кавычки отменяют значение пробела как разделителя и специальное значение всех символов, за исключением $ и \
> Перенаправляет вывод команды в файл
< Перенаправляет ввод для команды из файла
>> Перенаправляет вывод команды, который должен быть добавлен в конец существующего файла
| Создает канал, направляющий вывод одной команды во ввод другой команды
`...` Используется в паре; позволяет использовать вывод команды как аргументы в командной строке
$ Используется с позиционными параметрами и определенными пользователем пременными; также используется по умолчанию в качестве подсказки shell

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

8.1.1. Поиск всех символов (метасимвол *)

Метасимвол * осуществляет поиск любой строки символов, включая нулевую (пустую) строку. Вы можете использовать * для обозначения полного или частичного имени файла. Просто символ * ищет все имена файлов и справочников в текущем справочнике, за исключением тех, которые начинаются с точки. Чтобы посмотреть метасимвол * в действии, введите его как аргумент в команде echo:

	echo *<CR>
В ответ система распечатает перечень всех имен файлов в вашем текущем справочнике.

Символ * может представлять символы в любой части имени файла. Например, если вы знаете, что несколько файлов имеют одинаковые первые и последние буквы, то вы можете выдать запрос, основываясь на этом факте. Если в вашем справочнике находятся файлы FATE, FE, FADED_LINE, FIG3.4E, FINE_LINE, FAST_LINE, то для отображения всех этих файлов на экране введите команду:

	ls F*E<CR>

Вы можете, например, с помощью метасимвола * найти все файлы с именами memo в системном справочнике: ls */memo

8.1.2. Поиск по одному символу (метасимвол ?)

Метасимвол ? осуществляет поиск любого одного символа в имени файла за исключением лидирующей точки. Предположим, вы имеете книгу, в которой 12 глав и хотите получить список глав до 9-ой главы. Если ваш справочник содержит следующие файлы:

        Chapter1
        Chapter2
        Chapter5
        Chapter9
        Chapter11
то введите команду ls с метасимволом ? для получения всех глав, которые начинаются со строки "Chapter" и заканчиваются одним символом:
        $ ls Chapter?<CR>
        Chapter1
        Chapter2
        Chapter5
        Chapter9
        $

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

	ls Chapter??<CR>

И, конечно, чтобы получить список всех глав в текущем справочнике, используйте метасимвол *:

	ls Chapter*<CR>

8.1.3. Поиск одного набора (метасимвол [])

Если вы хотите, чтобы shell нашел любой символ из перечисленных вами символов, то заключите эти символы в квадратные скобки. Предположим, ваш справочник содержит следующие файлы: cat, fat, mat, rat. Если вы воспользуетесь в качестве части имени файла шаблоном [crf], то shell будет искать имена файлов, в которые входят либо буква "c", либо буква "r", либо буква "f" в указанной позиции. Пример:

        $ ls [crf]at<CR>
        cat
        fat
        rat
        $

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

Скобки могут также использоваться для обозначения диапазона символов, цифр или букв. Предположим в вашем справочнике содержатся следующие файлы: chapter1, chapter2, chapter3, chapter4, chapter5, chapter6. Если вы укажете:

	chapter[1-5]
то shell найдет файлы c chapter1 по chapter5.

Класс символов можно также указать с помощью диапазона букв. Если вы укажете [A-Z], то shell будет искать только большие буквы, если [a-z] - то малые буквы.