| |
Bash - зто сокращение "Bourne Again SHell" (Еще одна оболочкa Борна). Борновская оболочка - традиционная оболочка Unix, первоначально написанная Стивеном Борном. Все встроенные команды борновской оболочки доступны в Bash, и правила вычислений и синтаксис вэяты иэ спецификации Posix 1003.2 для стандартной оболочки Unix.
Этот раздел кратко суммирует то, что Bash унаследовал от борновской оболочки: структуры контроля оболочки, встроенные команды, переменные и другие особенности. Здесь также перечисляются наиболее значительные раэличия между Bash и борновской оболочкой.
Замечание: Символ ";" в описании синтаксиса команд может быть заменен на одну или несколько строк.
Bash содержит следующие циклические конструкции:
Синтаксис команды until:
until тестовые_команды; do команды-следствия; done
Выполнение "команд-следствий" происходит, пока финальная
команда в "тестовых_командах" имеет ненулевое состояние на
выходе.
Синтаксис:
while тестовые_команды; do команды-следствия; done
Выполнение "команд-следствий" происходит, пока финальная
команда в "тестовых_командах" имеет нулевое состояние на
выходе.
Синтаксис:
for имени [in список_слов...]; do команды; done
Выполняет команды для каждого члена "списка_слов", равного
текущему члену. Если "in список_слов" отсутствует,
предполагается "in "$@"".
Синтаксис:
if тестовые_команды; then
команды-следствия;
[elif сверхтестовые_команды; then
сверхследcтвия;]
[else альтернативные_следствия;]
fi
Выполнение "команд-следствий" начинается, только если
финальная команда "тестовых_команд" имеет нулевое выходное
состояние. В противном случае каждый список elif выполняется
в свою очередь, и если его состояние на выходе нулевое, то
выполняются "сверхследствия", и команда эавершена. Если
присутствуют также "альтернативные_следствия", и финальная
команда в предложении if или elif имеет ненулевое выходное
состояние, то выполняются "альтернативные_следствия".
Синтаксис:
case слово in [шаблон[|шаблон]...) команды ;;]...esac
Иэбирательное выполнение команд основано на сравнивании
"слова" с "шаблоном". Символ "|" испольэуется для разделения
нескольких шаблонов. Пример испольэования case для описания
интересного свойства животного:
echo -n "Введите имя животного:"
read animal
echo -n "$animal имеет "
case $animal in
лошадь|собака|кошка) echo -n "четыре";;
человек|кенгуру) echo -n "две";;
*) echo -n "неиэвестное число ";;
esac
echo "ног(и)."
Функции оболочки позволяют при выполнении группы команд испольэовать одно имя для всей группы. Функции выполняются так же, как "обычные команды".
Функции описываются с испольэованием следующего синтаксиса:
[function] имя () { список команд; }
Это описывает функцию с именем "имя". Тело функции - "список
команд", эаключенный в фигурные скобки. Этот список запускается
всегда, когда "имя" указывается как имя команды. Выходное состояние
функции - выходное состояние последней команды, выполняемой в теле.
Когда функция выполняется, ее аргументы становятся поэиционными параметрами времени ее выполнения. Специальный параметр # содержит количество позиционных параметров. Позиционный параметр 0 неизменный.
Если встроенная команда return выполняется внутри функции, выполнение функции прекращается и возобновляется со следующей команды после вызова функции. Когда функция завершается, значения позиционных параметров и специального параметра # становятся равными значениям до вызова функции.
Нижеследующие всроенные команды оболочки унаследованы из оболочки Борна. Эти команды реализованы, как указано в стандарте Posix 1003.2.
ничего не делает кроме расширения каких-либо аргументов и выполнения переназначения
читает и выполняет команды из аргумента имени файла в текущем контексте оболочки
выход из цикла for, while или until
смена текущей рабочей директории
выполнение следующей итерации цикла for, while или until
вывод аргументов, разделенных пробелами, на стандартное устройство вывода
аргументы собираются в одну команду, которая потом читается и выполняется
если задан аргумент команды, он смещает оболочку. Если не задан аргумент команды, переназначения могут быть использованы для влияния на текущую среду оболочки
выход из оболочки
отмечает аргументы как переменные для передачи в дочерние процессы в среде
передает опции в скрипты оболочки или функции
запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
посылает сигнал процессу
выводит текущий рабочий каталог
читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.
отмечает переменные как неизменяемые
заставляет функцию оболочки выйти с указанным значением
перемещает позиционные параметры налево
вычисляет условное выражение
выводит имя пользователя и системное время, использованное оболочкой и ее потомками
указывает команды, которые должны выполняться при получении оболочкой сигнала
устанавливает маску создания процессового файла
вызывает уничтожение переменных оболочки
ждет выхода из дочернего процесса и сообщает выходное состояние.
Bash использует определенные переменные так же, как и оболочка Борна. В некоторых случаях Bash приписывает переменной значение по умолчанию.
список символов, разделяющих поля, используемый когда оболочка разделяет слова как часть расширения
разделенный двоеточиями список каталогов, в которых оболочка ищет команды
текущий домашний каталог пользователя
разделенный двоеточиями список каталогов, используемых в поиске пути для сd-команд
разделенный двоеточиями список файлов, которые оболочка периодически проверяет на наличие почты. Можно также указать, какое сообщение выводить для отделения имени файла от сообщения с "?" В тексте послания $_ ставится для имени текуще го файла почты
базовая строка приглашения
вторичная строка приглашения
индекс последней опции, обработанной встроенной командой getopts
значение аргумента последней опции, обработанной встроенной командой getopts.
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, которая описывает поведение, исходя из числа аргументов.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |