Spec-Zone.ru › Bash

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

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

string1 == string2
string1 = string2

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

‘=’ следует использовать с командой test для соответствия POSIX.

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 вычисляются как арифметические выражения (см. Арифметика оболочки).

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