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