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

Содержание
Введение
Сравнение чисел
Сравнение строк
Разница между [ ] и [[ ]]
Похожие статьи

Введение

Бинарные операторы сравнения сравнивают две переменные или величины.

Для сравнения строк используются одни операторы сравнения для чисел другие.

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

-eq

is equal to - равняется

if [ "$a" -eq "$b" ]

-ne

is not equal to - не равняется

if [ "$a" -ne "$b" ]

-gt

is greater than - больше чем

if [ "$a" -gt "$b" ]

-eq

is equal to - равняется

if [ "$a" -eq "$b" ]

-ge

is greater than or equal to - больше или равно

if [ "$a" -ge "$b" ]

-lt

is less than - меньше чем

if [ "$a" -lt "$b" ]

-le

is less than or equal to - меньше или равно

if [ "$a" -le "$b" ]

<

is less than (within double parentheses) - меньше чем (в двойных скобках)

(("$a" < "$b"))

<=

is less than or equal to (within double parentheses) - меньше или равно (в двойных скобках)

(("$a" <= "$b"))

>

is greater than (within double parentheses) - больше чем (в двойных скобках)

(("$a" > "$b"))

>=

is greater than or equal to (within double parentheses) - меньше или равно (в двойных скобках)

(("$a" >= "$b"))

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

=

is equal to - равняется

if [ "$a" = "$b" ]

Внимание Обратите внимание на пробелы вокруг =. if [ "$a"="$b" ] не эквивалентно правильному варианту.

==

is equal to - равняется

if [ "$a" == "$b" ]

Это синоним =. Примечание Оператор сравнения == в двойных скобках ведёт себя иначе чем в одиночных. [[ $a == z* ]] # Верно если $a начинается с "z" (pattern matching). [[ $a == "z*" ]] # Верно если $a равняется z* (literal matching). [ $a == z* ] # File globbing and word splitting take place. [ "$a" == "z*" ] # Верно если $a равняется z* (literal matching).

Есть и другие отличия - о них читайте здесь

!=

is not equal to - не равняется

if [ "$a" != "$b" ]

Этот оператор использует pattern matching внутри конструкции [[ ... ]] .

<

Меньше чем, величина определяется порядком в таблице ASCII

if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ]

Обратите внимание, что "<" нужно экранировать внутри конструкции [ ].

>

Больше чем, величина определяется порядком в таблице ASCII

if [[ "$a > "$b" ]] if [ "$a" \> "$b" ]

Обратите внимание на то что ">" нужно экранировать внутри конструкции [ ] .

-z

Строка пустая, то есть имеет длинну равную нулю (string is null, that is, has zero length)

String='' # Zero-length ("null") string variable.

if [ -z "$String" ] then echo "\$String is null." else echo "\$String is NOT null." fi # $String is null.

-n

Строка не пустая (string is not null).

Внимание Для -n тестирования строку нужно заключить в кавычки внутри квадратных скобок. Использовании незакавыченной строки с ! -z, или незакавыченной строк внутри квадратных скобок обычно работает, однако, это небезопасная практика. Всегда заключайте тестовую строку в кавычки.

Разница между [ ] и [[ ]]

Чтобы увидеть разницу запустите скрипт br.sh

Переменная $url специально не определена.

#!/bin/bash if [ $url == "urn.su" ]; then echo "bingo" fi

./br.sh

./br.sh: line 3: [: ==: unary operator expected

А если взять в двойные квадратные скобки - ошибки не будет

#!/bin/bash if [[ $url == "urn.su" ]]; then echo "bingo" fi

./br.sh

Как вариант решения - можно было в одинарных квадратных скобках взять переменную в кавычки

#!/bin/bash if [ "$url" == "urn.su" ]; then echo "bingo" fi

В [[ ]] не нужно экранировать ">"

Сравните:

if [[ "$a > "$b" ]] if [ "$a" \> "$b" ]

Похожие статьи
Bash
Основы Bash
alias: Псевдонимы
Bash Scripting
-eq -gt …: Операторы сравнения
if else: Условные операторы
Цикл while
date: Дата
Переход на новую строку
Арифметические операции
sftp: Передать файл или пароль в Bash скрипте
Мониторинг потребления памяти
Работа с файлами в директории
awk
grep
sed
Ошибки Bash
Zsh
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......