меньше (внутри двойных круглых скобок )
меньше или равно (внутри двойных круглых скобок)
больше (внутри двойных круглых скобок)
больше или равно (внутри двойных круглых скобок)
[[ $a == z* ]] # истина, если $a начинается с символа "z" (сравнение по шаблону)
[[ $a == "z*" ]] # истина, если $a равна z*
[ $a == z* ] # имеют место подстановка имен файлов и разбиение на слова
[ "$a" == "z*" ] # истина, если $a равна z*
Этот оператор используется при поиске по шаблону внутри [[ ... ]].
меньше, в смысле величины ASCII-кодов
Обратите внимание! Символ "<" необходимо экранировать внутри [ ].
больше, в смысле величины ASCII-кодов
Обратите внимание! Символ ">" необходимо экранировать внутри [ ].
См. Пример 25-6 относительно применения этого оператора сравнения.
строка "пустая", т.е. имеет нулевую длину
Оператор -n требует, чтобы строка была заключена в кавычки внутри квадратных скобок. Как правило, проверка строк, не заключенных в кавычки, оператором ! -z, или просто указание строки без кавычек внутри квадратных скобок (см. Пример 7-6), проходит нормально, однако это небезопасная, с точки зрения отказоустойчивости, практика. Всегда заключайте проверяемую строку в кавычки[ 18 ].
Пример 7-5. Операции сравнения
# Здесь переменные "a" и "b" могут быть как целыми числами, так и строками.
# Здесь наблюдается некоторое размывание границ
#+ между целочисленными и строковыми переменными,
#+ поскольку переменные в Bash не имеют типов.
# Bash выполняет целочисленные операции над теми переменными,
#+ которые содержат только цифры
echo "(целочисленное сравнение)"
# Оба варианта, "-ne" и "!=", работают правильно.
Пример 7-6. Проверка -- является ли строка пустой
# str-test.sh: Проверка пустых строк и строк, не заключенных в кавычки,
# Используется конструкция if [ ... ]
# Если строка не инициализирована, то она не имеет никакого определенного значения.
# Такое состояние называется "null" (пустая) (это не то же самое, что ноль).
if [ -n $string1 ] # $string1 не была объявлена или инициализирована.
echo "Строка \"string1\" не пустая."
echo "Строка \"string1\" пустая."
# Выводится сообщение о том, что $string1 не пустая,
#+не смотря на то, что она не была инициализирована.
if [ -n "$string1" ] # На этот раз, переменная $string1 заключена в кавычки.
echo "Строка \"string1\" не пустая."
echo "Строка \"string1\" пустая."
fi # Внутри квадратных скобок заключайте строки в кавычки!