Условные выражения Bash
Условные выражения используются составной командой [[ (см. Условные конструкции), а также встроенными командами test и [ (см. Встроенные команды оболочки Bourne). Команды test и [ определяют свое поведение в зависимости от количества аргументов; сведения о других действиях, специфичных для каждой команды, см. в описаниях этих команд.
Выражения могут быть унарными или бинарными и формируются из приведенных ниже первичных выражений. Унарные выражения часто используются для проверки состояния файла или переменной оболочки. Бинарные операторы используются для сравнения строк, чисел и атрибутов файлов.
Bash обрабатывает некоторые имена файлов особым образом, когда они используются в выражениях. Если операционная система, в которой запущен Bash, предоставляет эти специальные файлы, Bash использует их; в противном случае он эмулирует их внутри оболочки следующим образом: если аргумент file одного из первичных выражений имеет вид /dev/fd/N, Bash проверяет файловый дескриптор N. Если аргумент file одного из первичных выражений — это /dev/stdin, /dev/stdout или /dev/stderr, Bash проверяет соответственно файловый дескриптор 0, 1 или 2.
При использовании с [[ операторы «<» и «>» выполняют лексикографическую сортировку с учетом текущей локали. Команда test использует порядок ASCII.
Если не указано иное, первичные выражения, работающие с файлами, следуют по символическим ссылкам и работают с целевым файлом, а не с самой ссылкой.
-a file-
Истина, если file существует.
-b file-
Истина, если file существует и является блочным специальным файлом.
-c file-
Истина, если file существует и является символьным специальным файлом.
-d file-
Истина, если file существует и является каталогом.
-e file-
Истина, если file существует.
-f file-
Истина, если file существует и является обычным файлом.
-g file-
Истина, если file существует и установлен его бит set-group-id.
-h file-
Истина, если file существует и является символической ссылкой.
-k file-
Истина, если file существует и установлен его бит sticky.
-p file-
Истина, если file существует и является именованным каналом (FIFO).
-r file-
Истина, если file существует и доступен для чтения.
-s file-
Истина, если file существует и имеет размер больше нуля.
-t fd-
Истина, если файловый дескриптор fd открыт и относится к терминалу.
-u file-
Истина, если file существует и установлен его бит set-user-id.
-w file-
Истина, если file существует и доступен для записи.
-x file-
Истина, если file существует и является исполняемым.
-G file-
Истина, если file существует и принадлежит эффективному идентификатору группы.
-L file-
Истина, если file существует и является символической ссылкой.
-N file-
Истина, если file существует и был изменен после последнего обращения к нему.
-O file-
Истина, если file существует и принадлежит эффективному идентификатору пользователя.
-S file-
Истина, если file существует и является сокетом.
file1 -ef file2-
Истина, если file1 и file2 ссылаются на одно и то же устройство и имеют одинаковые номера inode.
file1 -nt file2-
Истина, если file1 новее file2 (согласно времени изменения) или если file1 существует, а file2 не существует.
file1 -ot file2-
Истина, если file1 старее file2 или если file2 существует, а file1 не существует.
-o optname-
Истина, если параметр оболочки optname включен. Список параметров приведен в описании параметра -o встроенной команды
set(см. Встроенная команда Set). -v varname-
Истина, если переменная оболочки varname установлена (ей присвоено значение). Если varname — имя индексированного массива с индексом «@» или «*», выражение истинно, если в массиве есть хотя бы один установленный элемент. Если varname — имя ассоциативного массива с индексом «@» или «*», выражение истинно, если установлен элемент с таким ключом.
-R varname-
Истина, если переменная оболочки varname установлена и является ссылкой на имя.
-z string-
Истина, если длина string равна нулю.
-n stringstring-
Истина, если длина string не равна нулю.
string1 == string2string1 = string2-
Истина, если строки равны. При использовании с командой
[[выполняется сопоставление с шаблоном, как описано выше (см. Условные конструкции).Для соответствия стандарту POSIX с командой
testследует использовать «=». string1 != string2-
Истина, если строки не равны.
string1 < string2-
Истина, если string1 лексикографически предшествует string2.
string1 > string2-
Истина, если string1 лексикографически следует за string2.
arg1 OP arg2OP— это один из операторов «-eq», «-ne», «-lt», «-le», «-gt» или «-ge». Эти бинарные арифметические операторы возвращают истину, если arg1 соответственно равен, не равен, меньше, меньше или равен, больше либо больше или равен arg2. Arg1 и arg2 могут быть положительными или отрицательными целыми числами. При использовании с командой[[значения arg1 и arg2 вычисляются как арифметические выражения (см. Арифметические вычисления в оболочке). Поскольку подстановки, выполняемые командой[[для arg1 и arg2, потенциально могут привести к пустым строкам, при вычислении арифметических выражений такие строки рассматриваются как выражения, значение которых равно 0.
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html