Особенности работы оболочки bash.: ВОЗМОЖНОСТИ ОБОЛОЧКИ БОРНА.
Вперед Назад Содержание1. ВОЗМОЖНОСТИ ОБОЛОЧКИ БОРНА.
Bash - зто сокращение "Bourne Again SHell" (Еще одна оболочкa Борна). Борновская оболочка - традиционная оболочка Unix, первоначально написанная Стивеном Борном. Все встроенные команды борновской оболочки доступны в Bash, и правила вычислений и синтаксис вэяты иэ спецификации Posix 1003.2 для стандартной оболочки Unix.
Этот раздел кратко суммирует то, что Bash унаследовал от борновской оболочки: структуры контроля оболочки, встроенные команды, переменные и другие особенности. Здесь также перечисляются наиболее значительные раэличия между Bash и борновской оболочкой.
1.1 Циклические конструкции.
Замечание: Символ ";" в описании синтаксиса команд может быть заменен на одну или несколько строк.
Bash содержит следующие циклические конструкции:
- until
Синтаксис команды until:
Выполнение "команд-следствий" происходит, пока финальная команда в "тестовых_командах" имеет ненулевое состояние на выходе.until тестовые_команды; do команды-следствия; done
- while
Синтаксис:
Выполнение "команд-следствий" происходит, пока финальная команда в "тестовых_командах" имеет нулевое состояние на выходе.while тестовые_команды; do команды-следствия; done
- for
Синтаксис:
Выполняет команды для каждого члена "списка_слов", равного текущему члену. Если "in список_слов" отсутствует, предполагается "in "$@"".for имени [in список_слов...]; do команды; done
1.2 Условные конструкции
- if
Синтаксис:
Выполнение "команд-следствий" начинается, только если финальная команда "тестовых_команд" имеет нулевое выходное состояние. В противном случае каждый список elif выполняется в свою очередь, и если его состояние на выходе нулевое, то выполняются "сверхследствия", и команда эавершена. Если присутствуют также "альтернативные_следствия", и финальная команда в предложении if или elif имеет ненулевое выходное состояние, то выполняются "альтернативные_следствия".if тестовые_команды; then команды-следствия; [elif сверхтестовые_команды; then сверхследcтвия;] [else альтернативные_следствия;] fi
- case
Синтаксис:
Иэбирательное выполнение команд основано на сравнивании "слова" с "шаблоном". Символ "|" испольэуется для разделения нескольких шаблонов. Пример испольэования case для описания интересного свойства животного:case слово in [шаблон[|шаблон]...) команды ;;]...esac
echo -n "Введите имя животного:" read animal echo -n "$animal имеет " case $animal in лошадь|собака|кошка) echo -n "четыре";; человек|кенгуру) echo -n "две";; *) echo -n "неиэвестное число ";; esac echo "ног(и)."
1.3 Функции оболочки
Функции оболочки позволяют при выполнении группы команд испольэовать одно имя для всей группы. Функции выполняются так же, как "обычные команды".
Функции описываются с испольэованием следующего синтаксиса:
[function] имя () { список команд; }
Это описывает функцию с именем "имя". Тело функции - "список
команд", эаключенный в фигурные скобки. Этот список запускается
всегда, когда "имя" указывается как имя команды. Выходное состояние
функции - выходное состояние последней команды, выполняемой в теле.
Когда функция выполняется, ее аргументы становятся поэиционными параметрами времени ее выполнения. Специальный параметр # содержит количество позиционных параметров. Позиционный параметр 0 неизменный.
Если встроенная команда return выполняется внутри функции, выполнение функции прекращается и возобновляется со следующей команды после вызова функции. Когда функция завершается, значения позиционных параметров и специального параметра # становятся равными значениям до вызова функции.
1.4 Встроенные команды оболочки Борна
Нижеследующие всроенные команды оболочки унаследованы из оболочки Борна. Эти команды реализованы, как указано в стандарте Posix 1003.2.
- :
ничего не делает кроме расширения каких-либо аргументов и выполнения переназначения
- .
читает и выполняет команды из аргумента имени файла в текущем контексте оболочки
- break
выход из цикла for, while или until
- cd
смена текущей рабочей директории
- continue
выполнение следующей итерации цикла for, while или until
- echo
вывод аргументов, разделенных пробелами, на стандартное устройство вывода
- eval
аргументы собираются в одну команду, которая потом читается и выполняется
- exec
если задан аргумент команды, он смещает оболочку. Если не задан аргумент команды, переназначения могут быть использованы для влияния на текущую среду оболочки
- exit
выход из оболочки
- export
отмечает аргументы как переменные для передачи в дочерние процессы в среде
- getopts
передает опции в скрипты оболочки или функции
- hash
запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
- kill
посылает сигнал процессу
- pwd
выводит текущий рабочий каталог
- read
читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.
- readonly
отмечает переменные как неизменяемые
- return
заставляет функцию оболочки выйти с указанным значением
- shift
перемещает позиционные параметры налево
- test
вычисляет условное выражение
- times
выводит имя пользователя и системное время, использованное оболочкой и ее потомками
- trap
указывает команды, которые должны выполняться при получении оболочкой сигнала
- mask
устанавливает маску создания процессового файла
- unset
вызывает уничтожение переменных оболочки
- wait
ждет выхода из дочернего процесса и сообщает выходное состояние.
1.5 Переменные оболочки Борна
Bash использует определенные переменные так же, как и оболочка Борна. В некоторых случаях Bash приписывает переменной значение по умолчанию.
- IFS
список символов, разделяющих поля, используемый когда оболочка разделяет слова как часть расширения
- PATH
разделенный двоеточиями список каталогов, в которых оболочка ищет команды
- HOME
текущий домашний каталог пользователя
- CDPATH
разделенный двоеточиями список каталогов, используемых в поиске пути для сd-команд
- MAILPATH
разделенный двоеточиями список файлов, которые оболочка периодически проверяет на наличие почты. Можно также указать, какое сообщение выводить для отделения имени файла от сообщения с "?" В тексте послания $_ ставится для имени текуще го файла почты
- PS1
базовая строка приглашения
- PS2
вторичная строка приглашения
- OPTIND
индекс последней опции, обработанной встроенной командой getopts
- OPTARG
значение аргумента последней опции, обработанной встроенной командой getopts.
1.6 Важнейшие отличия от оболочки Борна
Bash реализует практически такую же грамматику, подстановку параметров и переменных, перенаправление и использование кавычек и апострофов, как и в оболочке Борна. Bash опирается на стандарт Posix 1003.2 как спецификацию того, как эти возможности должны быть реализованы. Однако, имеются некоторые отличия между обычной оболочкой Борна и стандартом POSIX; этот раздел описывает некоторые наиболее значительные отличия. Некоторые другие отличия будут упомянуты в других разделах этого документа.
Bash использует ключевой символ "!" для отрицания значения, возвращаемого конвейером. Очень полезно, когда выражение if выполняется только при возвращении ненулевого значения.
Bash включает brace-расширение (см. раздел 2.2 ).
Bash включает шаблоны образцов Posix и ksh- стиля, убирая конструкции %% и ## для удаления ведущей или завершающей подстроки из переменных.
Обеспечиваются Posix и ksh форма подстановки команд $(), наряду с конструкцией ` ` из оболочки Борна (которая также обеспечивается для совместимости).
Переменные, присутствующие в начальной среде оболочки, автоматически выносятся в дочерние процессы. Оболочка Борна не делает этого должным образом, если переменные точно не промаркированы с помощью команды export.
Поддерживается расширение ${#xx}, которое возвращает длину $xx.
Переменная IFS используется для разделения не всех слов, а только результатов расширения. Это закрывает давнее отверстие в защите оболочки.
Могут быть переменная и функция с одним и тем же именем: sh не разделяет два пространства имен.
В функциях Bash могут быть локальные переменные, таким образом можно писать весьма полезные рекурсивные функции.
Опция noclobber предназначена для избежания переписывания существующих файлов с помощью переназначенного вывода.
Bash позволяет написать функцию так, чтобы переопределить встроенную команду, и обеспечивает доступ к функциональности встроенных команд внутри функции благодаря встроенным командам builtin и command.
Встроенная команда builtin позволяет избирательное выключение функций при выполнении поиска команд.
Отдельные встроенные команды могут выть включены или выключены при использовании встроенной команды enable.
Функции могут быть переданы потомку через среду.
Встроенная команда read читает окончание строки в \ с помощью опции -r и использует переменную $REPLY по умолчанию, если аргументы не даны.
Встроенная команда return может быть использована для прекращения выполнения скриптов, выполненных встроенными командами . или source.
Встроенная команда umask позволяет символизировать аргументы аналогично chmod.
Встроенная команда test незначительно отличается от той, что обеспечивается стандартом Posix 1003.2, которая описывает поведение, исходя из числа аргументов.
Вперед Назад Содержание