Операторы сравнения в 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

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

if [ «$a» = «$b» ]
then
echo ‘true’
elif [[ «$a» =~ $b ]]
then
echo ‘true’
else
echo ‘false’
fi

Работа с файлами

Оператор Описание Пример
-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
-x [ -x $file ] Проверка на существование исполняемого файла .
Оператор проверяет, существует ли файл $file и является ли он исполняемым.
[ -x ‘/etc/exec_filename’ ] — True
[ -x ‘/etc/noexec_filename’ ] — False
[ -x » ] — False

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

Оператор Описание Пример
-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 ]

EnglishRussianUkrainian