Сравнение в программировании - общее название ряда операций над парами значений одного типа, реализующих математические отношения равенства и порядка. В языках высокого уровня такие операции, чаще всего, возвращают булево значение ("истина" или "ложь").
Рассмотрим на примерах как этим пользоваться в BASH/SHELL.
Cравнение целых чисел:
-eq (равно):
[ "$a" -eq "$b" ]
-ne (не равно):
[ "$a" -ne "$b" ]
-gt (больше):
[ "$a" -gt "$b" ]
-ge (больше или равно):
[ "$a" -ge "$b" ]
-lt (меньше):
[ "$a" -lt "$b" ]
-le (меньше или равно):
[ "$a" -le "$b" ]
< (меньше, внутри двойных круглых скобок):
(("$a" < "$b"))
<= (меньше или равно, внутри двойных круглых скобок):
(("$a" <= "$b"))
> (больше, внутри двойных круглых скобок):
(("$a" > "$b"))
>= (больше или равно, внутри двойных круглых скобок):
(("$a" >= "$b"))
Сравнение строк:
= (равно):
[ "$a" = "$b" ]
== (равно):
[ "$a" == "$b" ]
Синоним оператора =.
[[ $a == z* ]]
# истина, если $a начинается с символа "z" (сравнение по шаблону)
[[ $a == "z*" ]]
# истина, если $a равна z*
[ $a == z* ]
# имеют место подстановка имен файлов и разбиение на слова
[ "$a" == "z*" ]
# истина, если $a равна z*
!=
не равно
if [ "$a" != "$b" ]
Этот оператор используется при поиске по шаблону внутри [[ ... ]].
<
меньше, в смысле величины ASCII-кодов
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
Обратите внимание! Символ "<" необходимо экранировать внутри [ ].
>
больше, в смысле величины ASCII-кодов
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
Обратите внимание! Символ ">" необходимо экранировать внутри [ ].
-z
строка "пустая", т.е. имеет нулевую длину
-n
строка не "пустая".
Caution
Оператор -n требует, чтобы строка была заключена в кавычки внутри квадратных скобок. Как правило, проверка строк, не заключенных в кавычки, оператором ! -z, или просто указание строки без кавычек внутри квадратных скобок , проходит нормально, однако это небезопасная, с точки зрения отказоустойчивости, практика. Всегда заключайте проверяемую строку в кавычки.