Для сравнения чисел можно воспользоваться операторами другого рода. Общий формат:
"число" числовой_оператор "число" или
[ "число" числовой_оператор "число" ]
где в качестве выражения числовой_оператор могут фигурировать следующие операторы:
-eq | Два числа равны |
-ne | Два числа не равны |
-gt | Первое число больше второго числа |
-lt | Первое число меньше второго числа |
-le | Первое число меньше или равно второму числу |
-gt | Первое число больше или равно второму числу |
Выясним, равно ли одно число другому (в данном случае рассматривается, равно ли число 130 числу 130):
$ NUMBER=130
$ [ "$NUMBER" -eq "130" ]
$ echo $?
0
Превосходно! Результатом сравнения явилось значение "истина". Теперь изменим второе число и проверим, отобразится ли сообщение об ошибке. Возвращается значение 1 (130 не равно 100(.
$ [ "$NUMBER" —eq "100" ] $ echo $?
1
Чтобы проверить, является ли число 130 больше числа 100, воспользуйтесь следующей командой:
$ [ "$NUMBER" —gt "100" ]
$ echo $?
0
Ответ утвердительный.
Так же можно проверять два целых значения переменных. Ниже уточняется, будет ли значение переменной DEST_COUNT большим, чем значение переменной SOURCE_COUNT.
$ SOURCE_COUNT=13
$ DEST_COUNT-15
$ [ "$DEST_COUHT" -gt "$SOURCE_COUNT" ]
$ echo $?
0
Необязательно для выполнения проверки обращаться к переменной: можно сравнивать и числа, но в этом случае следует применять кавычки:
$ [ "990" -le "995" ] $ echo $?
0
Можно также комбинировать и тестировать выражения с помощью логических операторов. При этом следует пользоваться только одной парой квадратных скобок — не применяйте две пары скобок. Если не учитывать этого замечания, отобразится сообщение об ошибке — "too many arguments" (слишком много аргументов):
$ [ "990" -le "995" ] —а [ "123" —gt "33" ]
sh:[: too many arguments
В следующем примере проверяются два выражения. Если оба выражения истинны, результат будет истинным. Ниже приводится корректный метод выполнения проверки.
$ [ "990" -le "995" -a "123" -gt "33" ] $ echo $?
0
Команда expr используется в основном для проверки целочисленных значений, но может применяться также и при обработке строк. Общий формат команды expr:
expr аргумент оператор аргумент
Команду expr удобно использовать для подсчета количества строк:
$ expr 10 + 10
20
$ expr 900 + 600
1500
$ expr 30/3
10
$ expr 30/3/2
5
В случае применения знака умножения, можно с помощью обратной косой черты отменить его значение- Если этого не сделать, интерпретатор команд может неверно определить значение символа *:
$ expr 30 \*.3
90
Команда expr выполняет приращение переменной цикла. Сначала переменной цикла присваивается начальное значение нуль. Затем добавляется единица. Кавычки применяются для обозначения подстановки команд. Выводимые данные, полученные с помощью команды expr, присваиваются переменной цикла.
$ loop=0
$ LOOP=`expr $LOOP + 1`
Команду expr можно применять для выполнения сравнений чисел. Если вычисления выполняются с числами, отличными от целых, отображается сообщение об ошибке, например:
$ expr rr + 1
expr: нечисловой аргумент
Итак, необходимо передать значение переменной (не важно, какой именно), выполнить любую арифметическую операцию и направить выводимые данные в /dev/null. Затем достаточно проверить код завершения последней команды. Если код равен нулю, тогда мы имеем дело с числом; любое другое значение свидетельствует о том, что данное значение не является числом.
$ VALUE=12
$ expr $VALUE + 10 > /dev/null 2>&1
$ echo $?
0
Это — число.
$ VALUE=hello
$ expr $VALUE + 10 > /dev/null 2>&1
$ echo $?
2
А это — не численное значение.