Spec-Zone.ru › Bash

Условные выражения 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 string
string

Истина, если длина string не равна нулю.

string1 == string2
string1 = string2

Истина, если строки равны. При использовании с командой [[ выполняется сопоставление с шаблоном, как описано выше (см. Условные конструкции).

Для соответствия стандарту POSIX с командой test следует использовать «=».

string1 != string2

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

string1 < string2

Истина, если string1 лексикографически предшествует string2.

string1 > string2

Истина, если string1 лексикографически следует за string2.

arg1 OP arg2

OP — это один из операторов «-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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API