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








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

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

На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по Bash для начинающих
Назад Глава 1: Командная оболочка и скрипты Bash Вперед

Преимущества командной оболочки Bourne Again Shell

Bash — это командная оболочка проекта GNU

В проекте GNU (GNU's Not Unix) предоставляются инструментальные средства для администрирования UNIX-подобных системы, которые являются свободным программным обеспечением и соответствуют стандартам UNIX.

Оболочка Bash является sh-совместимой командной оболочкой, в которую добавлены полезные возможности из оболочек Korn shell (ksh) и C shell (csh). Оболочка реализована в соответствие со стандартом "IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools". В нем предлагаются функциональные улучшения в сравнении с sh, причем как для программирования, так и использования в интерактивном режиме; в стандарт добавлен режим редактирования командной строки, неограниченный размер истории команд, управление заданиями, функции командной оболочки и алиасы, индексированные массивы неограниченного размера и целочисленная арифметика по любому основанию от двух до шестидесяти четырех. Bash может без модификации выполнять большинство скриптов sh.

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

Возможности, которые есть только в bash

Вызов оболочки

Кроме односимвольных параметров, указываемых в командной строке оболочки и которые можно сконфигурировать с помощью встроенной команды set, есть несколько многосимвольных параметров, которыми вы можете пользоваться. В этой и в следующей главах мы рассмотрим пару наиболее популярных параметров; полный список параметров можно найти в документации Bash, выберите Bash features → Invoking Bash (Возможности Bash → Вызов Bash).

Файлы, используемые при запуске bash

Эти файлы являются скриптами, которые считываются и исполняются bash, когда она запускается. В следующих разделах описываются различные способы запуска командной оболочки, и указываются файлы, которые при этом считываются.

Вызов в интерактивном режиме с регистрацией в системе, т.е. с использованием параметра '--login'

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

Считываются следующие файлы:

  • /etc/profile
  • ~/.bash_profile, ~/.bash_login или ~/.profile: считывается первый из существующих файлов
  • ~/.bash_logout при выходе их оболочки.

Сообщения об ошибках выводятся в случае, если конфигурационные файлы существуют, но не читаются. Если файл не существует, bash будет искать следующий файл.

Вызов интерактивной командной оболочки без регистрации в системе

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

Считываются следующие файлы:

  • ~/.bashrc

Обычно ссылка на этот файл указывается в файле ~/.bash_profile:

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

Дополнительную информацию об инструкции условного исполнения if смотрите в главе 7 "Инструкции условного исполнения".

Неинтерактивное обращение к оболочке

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

Считываются следующие файлы:

  • определяется переменной BASH_ENV

Для поиска этих файлов переменная PATH не используется, так что если вы хотите использовать эти файлы, следует задать полный путь и имя файла.

Вызов с помощью команды sh

Bash пытается вести себя как исторически известная программа Bourne sh, при этом также соблюдается соответствие стандарту POSIX.

Считываются следующие файлы:

  • /etc/profile
  • ~/.profile

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

Режим POSIX

Этот режим можно включить либо с помощью встроенной команды set:

set -o posix 

либо вызвать программу bash с параметром --posix. После этого bash будет работать как можно ближе к стандарту POSIX для командных оболочек. То же самое можно сделать с помощью установки переменной POSIXLY_CORRECT.

Считываются следующие файлы:

  • определяются переменной ENV.

Дистанционный вызов

При вызове с помощью команды rshd считываются следующие файлы:

  • ~/.bashrc
Избегайте пользоваться командами r-tools

Помните об опасности использования таких команд, как rlogin, telnet, rsh and rcp. Они небезопасны сами по себе, поскольку передают по сети конфиденциальную информацию в незашифрованном виде. Если вам нужны средства дистанционного выполнения команд, передачи файлов и так далее, воспользуйтесь реализацией Secure Shell, которая обычно известна как SSH и доступна без всяких ограничений по ссылке http://www.openssh.org. Также есть клиентские программы для систем, отличных от UNIX; обратитесь на ваш локальный сервер с программным обеспечением.

Вызов в случае, когда UID не совпадает с EUID

В этом случае файлы настройки не читаются.

Интерактивные командные оболочки

Что такое интерактивная командная оболочка?

Интерактивная командная оболочка обычно читает данные из терминала пользователя и пишет данные в этот терминал: вход и выход подключены к терминалу. Bash запускается в интерактивном режиме, когда команда bash вызывается без аргументов, кроме случаев, когда параметром является строка, откуда осуществляется чтение, или когда командная оболочка вызывается с тем, чтобы читать данные из стандартного входного потока, в котором есть возможность устанавливать параметры позиционирования (смотрите главу 3 "Среда окружения Bash").

Командная оболочка интерактивная?

Можно проверить, посмотрев содержимое специального параметра "-", если оболочка shell интерактивная, то будет выдано следующее:

eddy:~> echo $-
himBH

В неинтерактивных командных оболочках значение строки приглашения PS1 не установлено.

Свойства интерактивной командной оболочки

Особенности интерактивного режима:

  • Bash считывает файлы запуска.
  • По умолчанию включено управление выполнением заданий.
  • Установлены значения для строк приглашения; для многострочных команд значение строки приглашения PS2 установлено равным ">". Это приглашение вы также увидите в случае, если команда не завершена, например, когда вы забыли указать кавычки или элементы структуры команды, которые не могут быть опущены, и т.д.
  • По умолчанию команды считываются из командной строки с помощью функции readline.
  • При получении символа EOF (End Of File — конец файла) bash интерпретирует параметр ignoreeof вместо немедленного завершения работы командной оболочки.
  • По умолчанию включены история команд и расширенные возможности истории команд. Когда происходит выход из командной оболочки, история сохраняется в файле, на который указывает переменная HISTFILE. По умолчанию переменная HISTFILE указывает на файл ~/.bash_history.
  • Включены расширенные возможности, позволяющие использовать алиасы.
  • Если не используется команда trap, сигнал SIGTERM игнорируется.
  • Если не используется команда trap, сигнал SIGINT перехватывается и обрабатывается. Следовательно, если, например, будут нажаты клавиши Ctrl+C, то это не приведет к выходу из вашей интерактивной командной оболочки.
  • В параметре huponexit задается, что при посылке сигнала SIGHUP происходит прекращение выполнения всех заданий.
  • При чтении команд происходит их выполнение.
  • Bash периодически проверяет почту.
  • Bash может быть настроен так, что когда встречается переменная с неопределенным значением, то происходит выход из оболочки. В интерактивном режиме такое действие отключено.
  • Когда при выполнении встроенных команд оболочки возникают ошибки перенаправления, то это не приводит к выходу из командной оболочки.
  • Когда в режиме POSIX встроенные команды возвращают коды ошибок, то это не приводит к выходу из командной оболочки. Список встроенных команд приводится в разделе "Встроенные команды командной оболочки".
  • Проблемы с выполнением команды exec не приводят к выходу из командной оболочки.
  • Синтаксические ошибки, обнаруженные парсером, не приводят к выходу из командной оболочки.
  • По умолчанию включена простая проверка синтаксиса встроенной команды cd.
  • Включен автоматический выход из командной оболочки, который происходит при превышении таймаута, указанного в переменной TMOUT.

Дополнительная информация:

  • в разделе "Переменные";
  • в разделе "О параметрах bash";
  • дополнительную информацию о сигналах смотрите в главе 12 "Перехват сигналов";
  • в разделе "Расширенные возможности командной оболочки" обсуждаются различные дополнительные возможности, используемые при вводе команд.

Условные выражения

Условные выражения используются в составной команде [[ и во встроенных командах test и [.

Выражения могут быть унарными или бинарными. Унарные выражения часто используются для проверки состояния файла. Для того, чтобы выполнить операцию, вам нужен всего лишь один объект, например, файл.

Есть операторы, работающие со строками, а также операторы сравнения чисел; есть бинарные операторы, для которых для того, чтобы выполнить операцию, требуется два объекта. Если аргумент FILE одного из операторов имеет вид /dev/fd/N, то проверяется дескриптор файла N. Если аргумент FILE одного из операторов имеет вид /dev/stdin, /dev/stdout или /dev/stderr, то соответственно проверяется дескриптор файла 0, 1 или 2.

Условные выражения подробно рассматриваются в главе 7 "Условные инструкции".

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

Арифметические операции в командной оболочке

Оболочка shell позволяет с помощью расширений оболочки или с помощью встроенной функции let выполнять арифметические операции.

Действия осуществляются над целыми числами с фиксированной разрядной сеткой без проверки на переполнение, хотя деление на 0 отлавливается и помечается как ошибка. Операторы, их приоритет и ассоциативность точно такие же, как и в языке C, смотрите главу 3 "Среда окружения Bash".

Алиасы

Алиасы позволяют заменить строку одним словом и использовать его как начало простой команды. Командная оболочка поддерживает использование списка алиасов, которые можно включать и отключать с помощью команд alias и unalias.

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

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

Мы подробнее рассмотрим алиасы в разделе "Алиасы".

Массивы

В bash предлагаются одномерные массивы переменных. В качестве массива может использоваться любая переменная; массив объявляется явно с помощью встроенной команды declare. Ограничений на размер массива нет, доступ к элементам массива и присваивание им значений не обязательно должны выполняться последовательно. Массивы начинаются с нулевого индекса. Смотрите главу 10 "Подробнее о переменных".

Стек директориев

Стек директориев — это список директориев, которые недавно посещались. По мере того, как посещаются директории, они добавляются в стек с помощью встроенной команды pushd, а с помощью встроенной команды popd директории удаляются из стека и заменяются другими.

Содержимое стека можно посмотреть с помощью команды dirs или проверив содержимое переменной DIRSTACK.

Более подробную информацию о работе этого механизма можно найти в документации bash.

Строка приглашения

Bash позволяет настроить строку приглашения (prompt) по своему вкусу. Смотрите раздел "Управление строкой приглашения" в документации bash.

Ограниченный доступ к командной оболочке

Когда вызов оболочки осуществляется с помощью команды rbash или с использованием параметров --restricted или -r, происходит следующее:

  • Встроенная команда cd отключается.
  • Невозможно задать или изменить значения переменных SHELL, PATH, ENV или BASH_ENV
  • В именах команд нельзя использовать косую черту (слэш).
  • С именами файлов, в которых есть слэш, не допускается использовать встроенную команду . (точка)
  • Во встроенной команде hash в параметре -p не допускается использовать слэш.
  • При запуске оболочки отключен импорт функций.
  • При запуске оболочки игнорируется значение переменной SHELLOPTS.
  • Отключено перенаправление результата работы с помощью операций >, >|, ><, >&, &> и >>.
  • Отключена встроенная команда exec.
  • Во встроенной команде enable отключены параметры -f и -d.
  • Нельзя изменять значение переменной PATH с помощью встроенной команды command.
  • Отключить ограничение доступа невозможно.

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

Дополнительная информация:

  • в разделе "Переменные"
  • в разделе "Дополнительные параметры Bash"
  • в документации Info Bash → Basic Shell Features → Redirections (Информация о Bash → Основные возможности команлной оболочки → Перенаправления)
  • redirection в разделе "Перенаправление и доскрипторы файлов": дополнительные возможности.

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