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

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: UNIX, Linux, FreeBSD, unix-shell

Статья представляет из себя шпаргалку по операторам сравнения в системах на базе UNIX. Также немного расскажем про работу с IF.

Применимо к основным командным интерпретаторам — sh (Bourne Shell), bash (Bourne Again Shell), csh, tcsh и некоторым другим.

Сравнение чисел

Оператор Описание Пример
-eq [ $x -eq $y ] Равно.
Для результат True необходимо, чтобы x был равен y.
[ 1 -eq 2 ] — False
[ 3 -eq 3 ] — True
-ne [ $x -ne $y ] Не равно.
Оператор обратный -eq.
[ 1 -ne 2 ] — True
[ 3 -ne 3 ] — False
-gt [ $x -gt $y ] Больше.
То есть проверяет больше ли x чем y.
[ 1 -gt 2 ] — False
[ 3 -gt 3 ] — False
[ 5 -gt 4 ] — True
-lt [ $x -lt $y ] Меньше.
Проверяет, что число в левой части (x) меньше числа в правой (y)
[ 1 -lt 2 ] — True
[ 3 -lt 3 ] — False
[ 5 -lt 4 ] — False
-ge [ $x -ge $y ] Больше или равно [ 1 -ge 2 ] — False
[ 3 -ge 3 ] — True
[ 5 -ge 4 ] — True
-le [ $x -le $y ] Меньше или равно [ 1 -le 2 ] — True
[ 3 -le 3 ] — True
[ 5 -le 4 ] — False

Пример использования в IF

if [ $x -eq $y ]
then
    echo 'true'
else
    echo 'false'
fi

Сравнение строк

Оператор Описание Пример
= [ "$a" = "$b" ] Равно.
То есть строка a равна строке b.
[ 'linux' = 'windows' ] — False
[ 'unix' = 'unix' ] — True
!= [ "$a" != "$b" ] Не равно.
Оператор обратный =.
[ 'linux' != 'windows' ] — True
[ 'unix' != 'unix' ] — False
=~ [[ "$a" =~ $b ]] Содержит.
То есть в строке a есть b.
Обратите внимание, что для данного оператора используются двойные квадратные скобки.
[[ 'linux' =~ 'windows' ]] — False
[[ 'unix' =~ 'ni' ]] — True
-z [ -z $b ] Проверка на нулевой размер.
Оператор проверяет, является ли строка b с нулевым размером.
[ -z 'linux' ] — False
[ -z '' ] — True
-n [ -n $b ] Проверка на ненулевой размер.
Оператор обратный -z.
[ -n 'linux' ] — True
[ -n '' ] — False
  [ $b ] Проверка на пустоту.
Оператор проверяет, является ли строка b не пустой.
[ 'linux' ] — True
[ '' ] — False
-f [ -f $file ] Проверка на существование файла.
Оператор проверяет, существует ли файл $file.
[ -f '/etc/filename' ] — True
[ -f '' ] — False
-d [ -d $folder ] Проверка на существование папки.
Оператор проверяет, существует ли каталог $folder.
[ -d '/etc/exist_folder' ] — True
[ ! -d '/etc/exist_folder' ] — False
[ -d '/etc/not_exist_folder' ] — False
[ ! -d '/etc/not_exist_folder' ] — True

Пример использования в IF

if [ "$a" = "$b" ]
then
    echo 'true'
elif [[ "$a" =~ $b ]]
then
    echo 'true'
else
    echo 'false'
fi

Несколько условий (логические операторы)

Оператор Описание Пример
-a [ $x -eq $y -a $z -le $w ] Логическое И.
В данном примере, проверяет, что (x равно y) И (z меньше или равно w)
[ 1 -eq 2 -a 3 -le 4 ] — False
[ 5 -eq 5 -a 3 -le 4 ] — True
[ 5 -eq 5 -a 6 -le 4 ] — False
-o [ $x -ne $y -o $z -ge $w ] Логическое ИЛИ.
В данном примере, проверяет, что (x не равно y) ИЛИ (z больше или равно w)
[ 1 -eq 2 -o 3 -le 4 ] — True
[ 5 -eq 5 -o 3 -le 4 ] — True
[ 5 -eq 5 -o 6 -le 4 ] — True
[ 1 -eq 2 -o 6 -le 4 ] — False

Дополнительно

Рассмотрим отдельно некоторые дополнительные возможности работы с if в командной строке Unix систем.

Как написать IF в одну строку

if [ $x -ne 0 ]; then echo 1; fi

if [ $x -ne 0 -a $y -eq 1 ]; then echo 1; else echo 2; fi

Или можно обойтись без if:

[[ $? -ne 0 ]] && echo 1 || echo 2

Арифметические операции

Расчет можно выполнить одним из следующих методов:

sum=$(( $sum1 + $sum2 + $sum3 ))

sum=`expr $sum1 + $sum2 + $sum3`

* где операции могут быть следующие:

  • + — сложение;
  • - — вычитание;
  • * — умножение;
  • / — деление;
  • % — остаток от деления;
  • = — приравнивание.

Ошибка «Integer expression expected»

Чаще всего, возникает при попытках использовать не тот оператор, например для строки -le (который должен использоваться для числа).

Примеры неправильного использования операторов:

[ "$x" -gt "5"]

[ "$x" -gt 5 ]

Правильно:

[ $x -gt 5 ]

# UNIX
Дмитрий Моск — частный мастер
Был ли полезен этот ответ?

Да            Нет