Особенности работы оболочки 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

Синтаксис:

for  имени  [in  список_слов...];  do  команды;   done
Выполняет команды для каждого члена "списка_слов", равного текущему члену. Если "in список_слов" отсутствует, предполагается "in "$@"".

1.2 Условные конструкции

if

Синтаксис:

if тестовые_команды; then
    команды-следствия;
[elif сверхтестовые_команды; then
  сверхследcтвия;]
[else альтернативные_следствия;]
fi
Выполнение "команд-следствий" начинается, только если финальная команда "тестовых_команд" имеет нулевое выходное состояние. В противном случае каждый список elif выполняется в свою очередь, и если его состояние на выходе нулевое, то выполняются "сверхследствия", и команда эавершена. Если присутствуют также "альтернативные_следствия", и финальная команда в предложении if или elif имеет ненулевое выходное состояние, то выполняются "альтернативные_следствия".

case

Синтаксис:

case слово in [шаблон[|шаблон]...)  команды  ;;]...esac
Иэбирательное выполнение команд основано на сравнивании "слова" с "шаблоном". Символ "|" испольэуется для разделения нескольких шаблонов. Пример испольэования case для описания интересного свойства животного:

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, которая описывает поведение, исходя из числа аргументов.


Вперед Назад Содержание