[[Операторы сравнения]]

Операторы сравнения

Строковые

Для сравнения строковых переменных

Оператор Назначение
str1 == str2 Равенство
str1 != str2 Неравенство
str1 < str2 str1 в алфавитном порядке предшествует str2
str1 > str2 str2 в алфавитном порядке предшествует str1
-n str1 str1 содержит один символ или более
-z str1 str1 не содержит ни одного символа
http://www.bash-scripting.ru/abs/chunks/ch07s03.html Замечание

Оператор == ведет себя по-разному внутри двойных квадратных скобок и внутри одинарных квадратных скобок.

[[ $a == z* ]]   # Истинно, если $a начинается с символа "z" (соответствие шаблону).
[[ $a == "z*" ]] # Истинно, если $a равно z* (посимвольное соответствие).
[ $a == z* ]     # Здесь имеют место подстановка имён файлов и разделение строки на слова.
[ "$a" == "z*" ] # Истинно, когда $a равно z* (посимвольное соотвествие).

Арифметические

Для сравнения целых чисел

Оператор Назначение
num1 -eq num2 num1 == num2
num1 -ne num2 num1 != num2
num1 -lt num2 num1 < num2
num1 -gt num2 num1 > num2
num1 -le num2 num1 <= num2
num1 -ge num2 num1 >= num2

Для сравнения чисел с плавающей точкой можно использовать следующую конструкцию

#!/bin/bash
float1='0.43'
float2='0.431'
if [[ $(echo "${float1} >= ${float2}" | bc) -eq 1 ]]; then
   echo "${float1} >= ${float2}"
else
   echo "${float1} < ${float2}"
fi

Для файлов

Оператор Назначение
-a файл (deprecated)
-e файл
Истинно, если файл существует
-b файл Истинно, если файл существует и являтся специальным блочным устройством
-c файл Истинно, если файл существует и является специальным символьным устройством
-d файл Истинно, если файл существует и является каталогом
-f файл Истинно, если файл существует и является обычным файлом
-g файл Истинно, если файл существует и имеет установленный бит SGID
-L файл
-h файл (deprecated)
Истинно, если файл существует и является символической связью
-k файл Истинно, если файл существует и имеет установленный "клейкий" бит
-p файл Истинно, если файл существует и является именованным каналом (FIFO)
-r файл Истинно, если файл существует и доступен для чтения
-s файл Истинно, если файл существует и имеет ненулевой размер
-t fd Истинно, если дескриптор файла fd открыт и связан с терминалом
-u файл Истинно, если файл существует и имеет установленный бит SUID
-w файл Истинно, если файл существует и доступен для записи
-x файл Истинно, если файл существует и является выполняемым
-O файл Истинно, если файл существует и принадлежит пользователю, задаваемому текущим эффективным идентификатором пользователя
-G файл Истинно, если файл существует и принадлежит группе, задаваемой текущим эффективным идентификатором группы
-S файл Истинно, если файл существует и является сокетом
-N файл Истинно, если файл существует и был изменен с момента последнего чтения
файл1 -nt файл2 Истинно, если файл1 новее (в соответствии с датой изменения), чем файл2
файл1 -ot файл2 Истинно, если файл1 старее, чем файл2
файл1 -ef файл2 Истинно, если файл1 и файл2 находятся на одном устройстве и имеют одинаковые номера индексных дескрипторов

Прочее

Оператор Назначение
-o опция Истинно, если установлена указанная опция командного интерпретатора




Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
178 +14 = ?
 
doc/bash/operators.txt · Последние изменения: 2017/03/27 14:07 — lexa
Gentoo Linux Driven by DokuWiki