Тематические термины: 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 ]