Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы OC UNIX_часть3.doc
Скачиваний:
21
Добавлен:
18.04.2015
Размер:
543.23 Кб
Скачать

4.1.3. Условия сравнения целых чисел

Команда testтакже может сравнить два целых числа. Для этого используется следующий синтаксис:

eq A равно B?

–ne A не равно B?

–ge A больше или равно B?

test A –le B A меньше или равно B?

–gt A больше B?

–lt A меньше B?

В данном случае команда testвоспринимает строки символов как целые числа. Поэтому во всех остальных случаях "нулевому" значению кода завершения соответствует пустая строка. В случае, если надо обнулить переменную, скажем, "x", то это достигается присваиванием "x=0".

Например;

x=abc; [ abc –eq "$x" ] ;echo $?

"[": integer expression expected before –eq

x=321; [ 321 –eq "$x" ] ; echo $?

0

x=3.21; [ 3.21 –eq "$x" ];echo $?

"[": integer expression expected before –eq

x=321; [ 123 –lt "$x" ]; echo $?

0

4.1.4. Сложные условия

Как показывает практика, часто возникает необходимость проверить одновременно несколько условий. Команда test позволяет сделать это, комбинируя булевские выражения с логическими операциями NOT, AND и OR. Это можно реализовать с помощью типовых логических операций:

  • ! (not)инвертирует значение кода завершения.

  • o (or)соответствует логическому "ИЛИ".

  • a (and)соответствует логическому "И".

Например,

[ ! privet ] ; echo $?

1

[ $i –gt 7 –a $i –le 99 ]

4.2. Команда expr

Для выполнения арифметических выражений используется команда expr (express - выражать). Она вычисляет значение выражения, введенного в качестве аргумента, а затем посылает результат на стандартный вывод. С командойexprмогут использоваться следующие арифметические операции:+ (плюс), (минус),* (умножение),/ (деление) и% (взятиеостатка).

Все операнды и операции должны быть разделены пробелами. Чтобы предотвратить интерпретацию метасимволов (*, &, ?, [], ^), необходимо отменить специальный смысл, заключая их в апострофы (например, '*') или двойные кавычки (например, "*") или ставить перед ним обратный слеш (например, \*).

$ expr 3 + 2

5

$ expr 7 \* 8

56

$ n=100

$ expr $n + 1

101

Команда exprпосылает результат на стандартный выход, поэтому позволяет использовать обратные апострофы, чтобы присвоить результат выполнения командыexprпеременной.

$ a=2 # Установка начального значения а, равного 2

$ a=`expr $a + 7` # Добавление к а числа 7 и

присвоение а результата

$ b=`expr $a / 3`

$ c=`expr $a – 1 "*" $ b`

$ d=`expr $c % 5`

$ e=`expr $d – $b`

$ echo $a $b $c $d $e

9 3 24 4 1

Примернепосредственного использования командыexpr:

$ expr 13 + 49 + 2 + 64 + 1

129

4.3. Команда read

Команда read (читать) ожидает от пользователя ввода данных с клавиатуры, а при обнаружении символа новой строки считывает введенные данные в переменную–аргумент.

Например,

$ read line

This is a line of text!

$ echo $line

This is a line of text!

Команда readможет выполнять более сложные действия. Если задать несколько аргументов, то первое слово со стандартного ввода поступает в первый аргументread, второе – во второй и т.д. Все дополнительные слова попадают в последний аргумент.

Например,

$ read x y z

To be or not to be

хпримет значение "To",y– значение "be", а вzбудет записано "or not to be".

Статус выхода команды readбудет нулевым (true), пока в процессе ввода не возникнет условие конца файла (end–of–file). После обнаружения конца файлаreadвозвращает значениеfalse. Еслиreadполучает ввод с клавиатуры, то она будет возвращатьtrue, пока пользователь не нажмет<Ctrl+D>. Если ввод переназначен на файл, тоreadбудет возвращатьtrueпо достижения конца файла.