Операторы сравнения
Строковые
Для сравнения строковых переменных
Оператор | Назначение |
---|---|
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 опция | Истинно, если установлена указанная опция командного интерпретатора |
Обсуждение