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