Составные команды
Составные команды могут быть следующими:
(список)
— список выполняется в подоболочке. Присвоения переменных и встроенные команды,
оказывающие воздействие на окружение интерпретатора, не будут иметь силы после
завершения выполнения команды. Код завершения равен коду завершения списка.
{ список; }
— Список просто выполняется в текущей оболочке. Список должен прерываться сим
волом завершения строки или точкой с запятой. Такая команда называется групповой.
Код завершения равен коду завершения списка.
(( выражение ))
Вычисляет значение арифметического выражения. Если значение выражения не равно нулю, то код завершения ноль, в противном случае код завершения равен единице.
Арифметические выраженияОболочка позволяет вычислять арифметические выражения. Вычисления производятся с длинными целыми, без проверки переполнения, деление на ноль приводит к ошибке. Ниже перечислены арифметические операторы в порядке убывания приоритета.
— + унарные плюс и минус
! ~ логическое и побитовое отрицание
** возведение в степень
* / % умножение, деление, остаток
+ - сложение, вычитание
< < > >
сдвиг битов <= >= < >
сравнение
== != равенство, неравенство & побитовое И
побитовое исключающее ИЛИ | побитовое ИЛИ && логическое И
|| логическое ИЛИ 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 (больше либо равно). Истина в
случае выполнения соответствующего условия.