Шрифт:
test "строка"
test оператор_строки "строка"
test "строка" оператор_строки "строка"
[ оператор_строки строка ]
[ строка оператор_строки строка ]
Здесь в качестве выражения оператор_строки могут использоваться следующие операторы:
== Две строки равны
!= Две строки не равны
– z Эта строка нулевая
– n Эта строка не является нулевой
Чтобы проверить, присвоено ли переменной среды editor нулевое значение, примените команду:
$ [ -х $EDITOR ]
$ echo $?
1
Ответ отрицательный. Присвоено ли этой переменной значение vi?
$ [ $EDITOR= "vi" ]
$ echo $?
0
Ответ утвердительный. Отобразим это значение на экране:
$ echo $EDITOR
vi
Проверить, равны ли значения переменных таре и таре2, можно, воспользовавшись следующей командой:
$ TAPE="/dev/rmt0"
$ TAPE2="/dev/rmt1"
$ [ "$TAPE" = "$ТАРЕ2" ]
$ echo $?
1
Ответ отрицательный. При присваивании переменных необязательно применять двойные кавычки. Но при сравнении строк использование двойных кавычек является непременным условием.
Чтобы проверить "неравенство" переменных таре и таре2, примените следующую команду:
$ [ »$TAPE" != "$ТАРЕ2" ]
$ echo $?
0
Значения этих переменных не равны.
17.4. Проверка чисел
Для сравнения чисел можно воспользоваться операторами другого рода. Общий формат:
"число" числовой_оператор "число" или
[ "число" числовой_оператор "число" ]
где в качестве выражения числовой_оператор могут фигурировать следующие операторы:
– 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
17.5. Применение команды expr
Команда 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
17.5.1. Приращение переменной цикла