Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Страницы справочного руководства ОС UNIX на русском


Служба Рассылок Subscribe.Ru

Выпуск 38

man bash(1), часть вторая

Уважаемые подписчики! Этот выпуск - второй в серии, посвященной командному интерпретатору bash. Перевод сделан 6-7 апреля по справочному руководству ОС Solaris 8.

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


bash(1)

ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА

Зарезервированными являются слова, имеющие специальное значение для командного интерпретатора. Следующие слова распознаются как зарезервированные, если не замаскированы и являются либо первым словом простой команды (см. "СИНТАКСИС КОМАНД" ниже), либо третьим словом команды case или for:

! case do done elif else esac fi for function if in select then until while { } time [[ ]]

СИНТАКСИС КОМАНД

    Простые команды

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

Возвращаемым значением простой команды является ее статус выхода, или 128+n, если команда завершена сигналом n.

    Конвейеры

Конвейер - это последовательность одной или более команд, разделенных символом |. Конвейер имеет следующий формат:

[time [-p]] [ ! ] команда [ | команда2 ... ]

Стандартный выходной поток команды связывается со стандартным входным потоком команды2. Эта связь выполняется раньше, чем любые перенаправления, задаваемые командой (см. "ПЕРЕНАПРАВЛЕНИЕ" ниже).

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

Если перед конвейером идет зарезервированное слово time, после завершения конвейера выдается общее, пользовательское и системное время, потраченное на его выполнение. Опция -p изменяет формат вывода на задаваемый стандартом POSIX. Переменная TIMEFORMAT может задавать строку формата выдачи информации о времени; см. описание переменной TIMEFORMAT в разделе "Переменные командного интерпретатора" ниже.

Каждая команда в конвейере выполняется как отдельный процесс (т.е. в порожденном интерпретаторе).

    Списки

Список - это последовательность одного или более конвейеров, разделенных одним из операторов ;, &, && или ||, и не обязательно завершающаяся одним из операторов ;, & или <перевод строки>.

Из этих операторов списка && и || имеют равный приоритет, причем больший, чем ; и &, тоже имеющие равный приоритет.

Если команда завершается управляющим оператором &, интерпретатор выполняет команду в фоновом режиме в порожденном интерпретаторе. Командный интерпретатор не ждет завершения команды, а статус выхода в этом случае - 0. Команды, разделенные ; выполняются последовательно; командный интерпретатор ждет поочередно завершения каждой из команд. Статус возврата списка в этом случае совпадает со статусом возврата последней выполненной команды.

Управляющие операторы && и || обозначают, соответственно, И-списки и ИЛИ-списки. И-список имеет вид

команда && команда2

Команда2 выполняется только и если только команда вернула статус выхода ноль.

ИЛИ-список имеет вид

команда || команда2

Команда2 выполняется только и если только команда вернула ненулевой статус выхода. И- и ИЛИ-списки возвращают статус последней команды, выполненной в списке.

    Составные команды

Составными называют следующие команды:

(список)
Список выполняется в порожденном командном интерпретаторе. Присваивания переменным и встроенные команды, влияющие на среду командного интерпретатора, не действуют после завершения команды. Статусом возврата является статус выхода списка.

{ список; }
Список просто выполняется в среде текущего командного интерпретатора. Список должен завершаться переводом строки или точкой с запятой. Эту команду называют командой группировки. Статусом возврата является статус выхода списка.

((выражение))
Выражение вычисляется в соответствии с правилами, описанными ниже в разделе "ВЫЧИСЛЕНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ". Если выражение имеет ненулевое значение, статус возврата равен 0; в противном случае - 1. Эта конструкция эквивалентна конструкции let "выражение".

[[ выражение ]]
Возвращает статус 0 или 1 в зависимости от значения указанного условного выражения. Выражения состоят из компонентов, описанных ниже в разделе "УСЛОВНЫЕ ВЫРАЖЕНИЯ". Деление слов и подстановка имен файлов в словах между [[ и ]] не выполняется; выполняется замена тильды, подстановка значений параметров и переменных, арифметическая подстановка, подстановка результатов команд и подстановка процессов, а также удаление кавычек.

При использовании операторов == и != строка справа оператора считается образцом и сопоставляется по правилам, описанным ниже в подразделе "Сопоставление с образцом". Возвращается значение 0 если строка, соответственно, сопоставляется и не сопоставляется с образцом, и 1 в противном случае. Любая часть образца может быть взята в кавычки, чтобы сопоставление с ней шло буквально.

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

( выражение )
Возвращает значение выражения. Круглые скобки можно использовать для изменения обычного приоритета операторов.

! выражение
Истинно, если выражение ложно.

выражение1 && выражение2
Истинно, если истинны оба выражения, выражение1 и выражение2.

выражение1 || выражение2
Истинно, если истинно выражение1 или выражение2.

Операторы && и || не вычисляют выражение2, если значения выражения1 достаточно для определения возвращаемого значения всего условного выражения.

for имя [ in список_слов ] ; do список ; done
Выполняются подстановки в списке_слов после in, в результате чего получается список эелементов. Переменная с соответствующим именем последовательно получает значение каждого элемента этого списка, и каждый раз выполняется список. Если слово in не указано, команда for выполняет список для каждого установленного позиционного параметра (см. раздел "ПАРАМЕТРЫ" ниже). Сатусом возврата является статус выхода последней выполненной команды. Если в результате подстановок элементов списка_слов после in получается пустой список, команды не выполняются и возвращается статус 0.

select имя [ in список_слов ] ; do список ; done
Выполняются подстановки в списке_слов после in, в результате чего получается список эелементов. Набор полученных после подстановки слов выдается в стандартный поток ошибок, причем перед каждым элементом выдается его порядковый номер. Если слово in не указано, выдаются установленные позиционные параметры (см. раздел "ПАРАМЕТРЫ" ниже). Затем выдается приглашение PS3 и читается строка со стандартного входного потока. Если эта строка содержит число, соответствующее одному из выданных слов, то переменная имя получает его значение. Если строка пустая, слова и приглашение выдаются снова. Если прочитан символ конца файла (EOF), команда заврешается. При вводе любого другого значения переменная имя получает пустое значение. Прочитанная строка сохраняется в переменной REPLY. Список выполняется после каждого выбора, пока не будет выполнена команда break или return. Статусом выхода команды select является статус выхода последней команды в списке, или 0, если ни одна команда не была выполнена.

case слово in [ ( образец [ | образец ] ... ) список ;; ] ... esac
Команда case сначала подставляет значение слова и пытается его сопоставить поочередно с каждым образцом, используя те же правила сопоставления, что и для имен файлов (см. подраздел "Подстановка имен файлов"). Если найден сопоставляющийся образец, выполняется соответствующий список. После нахождения первого сопоставления дальнейшее сопоставление не выполняется и команда завершается. Статус выхода равен 0, если ни один образец не сопоставился. В противном случае, он равен статусу выхода последней выполненной команды из соответствующего списка.

if список; then список; [ elif список; then список; ] ... [ else список; ] fi
Выполняется список после if. Если его статус выхода - 0, выполняется список после then. В противном случае, выполняется последовательно список в очередной конструкции elif, и если его статус выхода - 0, выполняется соответствующий список после then и команда завершается. Если все конструкции elif проверены и ни один из списков не вернул статус 0, выполняется список после else, если эта конструкция задана. Статусом выхода является статус выхода последней выполненной команды или 0, если ни одно из условий не оказалось истинным.

while список; do список; done
until список; do список; done
Команда while циклически выполняет список после do, пока последняя команда списка возвращает статус выхода 0. Команда until идентична команде while, но условие завершения - противоположно; список после do выполняется, пока последняя команда списка возвращает ненулевой статус выхода. Статусом выхода команд while и until является статус выхода последней выполненной команды списка или 0, если ни одна команда не выполнена.

[ function ] имя () { список; }
Эта команда определяет функцию с указанным именем. Тело функции образует список команд между фигурными скобками { и }. Этот список выполняется каждый раз, когда имя функции указывается как имя простой команлы. Статусом выхода функции является статус выхода последней команды, выполненной в теле функции. (См. раздел "ФУНКЦИИ" ниже.)

В следующем выпуске

man pkgrm(1M) по UnixWare 2.03. Выпуск ожидается в среду, 10 апреля.

С наилучшими пожеланиями,

  В.К.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное