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

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

(список)

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

{ список; }

— Список просто выполняется в текущей оболочке. Список должен прерываться сим­
волом завершения строки или точкой с запятой. Такая команда называется групповой.
Код завершения равен коду завершения списка.

(( выражение ))

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

Арифметические выраженияОболочка позволяет вычислять арифметические выра­жения. Вычисления производятся с длинными целыми, без проверки переполнения, деление на ноль приводит к ошибке. Ниже перечислены арифметические операторы в порядке убывания приоритета.

— + унарные плюс и минус
! ~ логическое и побитовое отрицание
** возведение в степень
* / % умножение, деление, остаток
+ - сложение, вычитание

 


< < > >

сдвиг битов <= >= < >

сравнение

== != равенство, неравенство & побитовое И

побитовое исключающее ИЛИ | побитовое ИЛИ && логическое И

|| логическое ИЛИ exprl?expr2:ехргЗ

условное выражение = *= /= %= += -= < <= > >= &= * = |=

присвоение

8 качестве операндов могут использоваться переменные. До вычисления выражения производится раскрытие параметров. Значение параметра приводится к длинному це­лому. Константы начинающиеся с 0 интерпретируются как восьмеричные числа, начи­нающиеся с 0x или 0X как шестнадцатеричные. Иначе числа записываются в форме [base#]n, где base — число от 2 до 64 определяющее систему счисления, а n число в этой системе. Если base опущено, то число считается десятичным. Цифры больше

9 представляются латинскими буквами в нижнем регистре, верхнем регистре, _, @, в данном порядке. Если основание не превышает 36, то большие и маленькие буквы равнозначны.

[[выражение]]

Код завершения 0 или 1 зависит от значения условного выражения. Ноль если значение истина и единица в противном случае. Выражения могут объединяться следующими операторами, перечисленными в порядке убывания приоритета:

( выражение )

возвращает значение выражения. ! выражение

истина если выражение ложь. выражение1 && выражение2

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

истина если хотя бы одно из выражений истина.

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

-a file

Истина если файл существует -b file

Истина если файл существует и это файл блочно-ориентированного устройства -с file

Истина если файл существует и это файл байт-ориентированного устройства -d file

Истина если файл существует и это каталог -е file

Истина если файл существует -f file

Истина если файл существует и это регулярный файл

 


-g file

Истина если файл существует и у него установлен бит SGID -h file

Истина если файл существует и это символическая ссылка -k file

Истина если файл существует и у него установлен бит SUID -p file

Истина если файл существует и это именованный канал -r file

Истина если файл существует и он доступен для чтения -s file

Истина если файл существует и его размер больше нуля

-t fd Истина если файл с указанным дескриптором открыт и это терминал -u file

Истина если файл существует и у него установлен бит SUID -w file

Истина если файл существует и доступен для записи -x file

Истина если файл существует и этот файл выполняемый -O file

Истина если файл существует и его владелец — пользователь чей идентифи­катор равен эффективному идентификатору выполняемого процесса -G file

Истина если файл существует и принадлежит группе идентификатор которой

равен эффективному идентификатору группы выполняемого процесса -L file

Истина если файл существует и это символическая ссылка -S file

Истина если файл существует и это сокет -N file

Истина если файл существует и время изменения больше времени доступа file1 -nt file2

Истина если file1 новее file2 file1 -ot file2

Истина если file1 старее file2 -z string

Истина если длина строки ноль -n string

Истина если длина строки не ноль string1 == string2

Истина если строки равны string1 != string2

Истина если строки не равны string1 < string2

Истина если string1 при сортировке, с учетом текущей локали, окажется рань­ше string2 string1 > string2

Истина если string1 при сортировке окажется после string2 arg1 OP arg2

, где OP одна из следующих: -eq (равно), -ne (не равно), -lt (меньше чем), -le

(меньше либо равно), -gt (больше чем), -ge (больше либо равно). Истина в

случае выполнения соответствующего условия.