Возможности командной оболочки linux

Возможности командной оболочки linux

Если входные данные не закомментированы, командная оболочка прочитает их и разделит их на слова и операторы с учетом использования кавычек, с помощью которых задается смысл каждого элемента входных данных. Затем эти слова и операторы транслируются в команды и другие конструкции, возвращающие статусы завершения, которые можно будет проверять или обрабатывать. Описанная ранее схема создание нового процесса и его выполнения fork-and-exec будет использована только после того, как командная оболочка следующим образом проанализирует входные данные:

  • Командная оболочка считывает информацию из файла, из строки или из терминала пользователя.
  • Входные данные разбиваются на слова и операторы с учетом правил использования кавычек, смотрите главу 3 «Среда окружения Bash». Эти лексемы разделяются между собой с помощью метасимволов. Выполняется подстановка алиасов.
  • Оболочка в простых командах и в сложных составных командах выполняет синтаксический анализ лексем (анализирует и выполняет подстановки).
  • Bash выполняет различные дополнительные действия, которые включены в командной оболочке: преобразовывая лексемы в списки имен файлов и команды и в списки аргументов.
  • Если необходимо, выполняется перенаправление; операторы перенаправления и их операнды удаляются из списка аргументов.
  • Выполняются команды.
  • Дополнительно оболочка может ждать, пока команда будет завершена, и может получить ее статус завершения.

Команды командной оболочки

Простая команда оболочки, такая как touch file1 file2 file3 , состоит из самой команды, за которой следуют аргументы, разделенные пробелами.

Более сложные команды оболочки состоят из простых команд, которые объединены друг с другом различным образом: с помощью конвейера, когда выход одной команды подключается ко входу второй команды, с помощью цикла, с помощью условной инструкции или еще каким-нибудь образом. Пара примеров:

ls | more gunzip file.tar.gz | tar xvf -

Функции командной оболочки

Функции командной оболочки являются способом создания групп команд, выполнение которых впоследствии будет осуществляться обращением к единому для всей группы команд имени. Выполнение группы команд будет осуществляться точно так же, как и «обычных» команд. Когда имя функции используется в качестве имени простой команды, будут выполнены все команды в списке, связанном с именем этой функции.

Читайте также:  Burn linux to flash

Функции командной оболочки выполняются в контексте текущей оболочки; для их интерпретации новый процесс не создается.

Функции объясняются в главе 11 «Функции».

Параметры командной оболочки

Параметр — это сущность, в которой хранятся значения. Это может быть имя, номер или специальное значение. В случае с командными оболочками переменная является параметром, который запоминается по имени. Переменная имеет значение и может содержать ноль или большее количество атрибутов. Переменные создаются с помощью встроенной команды declare.

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

Присваивание значений переменным обсуждается в разделе «Переменные», дополнительные возможности использования переменных рассматриваются в главе 10 «Подробнее о переменных».

Расширенные возможности командной оболочки

После того, как командная строка будет разбита на лексемы, к ней применяются дополнительные действия (или расширения — shell expansions). Это следующие действия:

  • раскрытие фигурных скобок;
  • замена символа «тильда»;
  • подстановка параметров и переменных;
  • подстановка команд;
  • раскрытие арифметических выражений;
  • разбиение на отдельные слова;
  • подстановка имен файлов.

Мы подробно обсудим эти типы дополнительных действий «Расширения командной оболочки».

Перенаправление данных

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

Выполнение команд

Когда команда выполняется, та ее часть, которую парсер определяет как присваивание значений переменным (предшествующее имени команды) и перенаправление данных, сохраняются для последующего использования. Для той части команды, которая не участвует в присваивании значений переменным или в перенаправлении данных, выполняются все необходимые дополнительные действия; первое слово, оставшееся после выполнения действий, рассматривается как имя команды, а оставшаяся часть является аргументами этой команды. Затем выполняются действия по перенаправлению данных, затем переменным назначаются строковые значения. Если имени команды нет, то переменные изменят текущую среду командной оболочки.

Читайте также:  Astra linux основная файловая система

Важной частью задач, которые выполняет командная оболочка, является поиск команд. Bash делает это следующим образом:

  • Проверяется, содержит ли команда слэши, Если нет, то сначала проверяется список функций с тем, чтобы увидеть, есть ли в нем команды с искомым именем.
  • Если команда не является функцией, то она ищется в списке встроенных команд.
  • Если команда не является ни функцией, ни встроенной командой, то она ищется в директориях, перечисленных в переменной PATH . Для того, чтобы сократить затраты, связанные с поиском путей, указанных в PATH , в bash для запоминания полных путей к именам исполняемых модулей используются хеш-таблицы (область хранения данных расположена в памяти).
  • Если поиск оказался неудачным, то bash выдает сообщение об ошибке и выдает код возврата, равный 127.
  • Если поиск оказался успешным, или если в команде есть слэши, то командная оболочка выполняет команду в отдельной среде окружения.
  • Если выполнение невозможно из-за того, что файл не является исполняемым и не директорий, то предполагается, что это скрипт.
  • Если команда не начала выполняться асинхронно, командная оболочка будет ожидать завершение исполнения команды и получит код возврата.

Скрипты командной оболочки

Когда файл, содержащий команды оболочки, используется при вызове Bash в качестве первого аргумента без параметров (т. е. без -c или -s ), будет создана неинтерактивная оболочка. Эта оболочка сначала ищет файл со скриптом в текущем директории и, если он там не будет найден, ищет его затем с использованием переменной PATH .

Предыдущий раздел: Оглавление Следующий раздел:
Исполнение команд Разработка хороших скриптов

Источник

Оцените статью
Adblock
detector