Условные выражения Bash
Условные выражения используются командой [[ (см. Условные конструкции) и встроенными командами test и [ (см. Встроенные команды оболочки Bourne). Команды test и [ определяют своё поведение в зависимости от количества аргументов; для других действий, специфичных для каждой команды, смотрите соответствующие описания.
Выражения могут быть унарными или бинарными и формируются из следующих основных элементов. Унарные выражения часто используются для проверки состояния файла. Также существуют строковые операторы и операторы сравнения чисел. Bash обрабатывает несколько имён файлов особым образом, когда они используются в выражениях. Если операционная система, на которой работает Bash, предоставляет эти специальные файлы, Bash будет использовать их; в противном случае он будет эмулировать их внутренне с таким поведением: Если аргумент file одного из основных элементов имеет вид /dev/fd/N, проверяется дескриптор файла N. Если аргумент file одного из основных элементов равен /dev/stdin, /dev/stdout или /dev/stderr, проверяются дескрипторы файлов 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 существует и его «липкий» бит установлен.
-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 установлена (ей присвоено значение).
-R varname-
Истина, если переменная оболочки varname установлена и является ссылкой на имя.
-z string-
Истина, если длина строки string равна нулю.
-n stringstring-
Истина, если длина строки string не равна нулю.
string1 == string2string1 = string2-
Истина, если строки равны. При использовании с командой
[[, это выполняет сопоставление шаблонов, как описано выше (см. Условные конструкции).‘=’ следует использовать с командой
testдля соответствия POSIX. 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 вычисляются как арифметические выражения (см. Арифметика оболочки).
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