- •И.Н.Акуленок
- •Утверждено советом университета
- •Введение
- •Глава 1. Текстовые редакторы
- •1.1. Редактор ed
- •1.1.1. Команды, не использующие адресации строк
- •1.1.2. Команды, использующие один адрес
- •1.1.3. Команды, использующие два адреса
- •1.1.4. Нумерация строк
- •1.1.5. Примеры использования команд
- •1.2. Редактор VI и ex
- •1.2.1. Редактирование нескольких файлов
- •1.2.2. Вставка текста из одного файла в другой
- •1.3. Потоковый редактор sed
- •1.4. Контрольные вопросы
- •Глава 2. Командные процессоры ос unix
- •2.1. Типы командных процессоров
- •2.2. Идентификация и смена оболочки
- •2.3. Запуск shell и стартовых shell–файлов
- •2.4. Установка переменных среды
- •2.5. Псевдонимы команд
- •2.6. Выполнение .Profile после его изменения
- •2.7. Контрольные вопросы
- •Глава 3. Интерпретатор shell
- •3.1. Shell–переменные
- •3.1.1. Задание значений переменных и их отмена
- •3.1.2. Экспорт переменных
- •3.2. Специальные символы
- •3.2.1. Использование двойных кавычек и апострофа
- •3.2.2. Обратные апострофы
- •3.2.3. Обратная наклонная черта
- •3.3. Позиционные переменные
- •3.4. Код завершения процесса
- •3.5. Конвейеры и списки
- •3.6. Композиции команд
- •3.5.1. Порожденный shell – оператор круглые скобки ( )
- •3.5.2. Оператор списка – фигурные скобки {}
- •3.6. Контрольные вопросы
- •Глава 4. Программные структуры
- •4.1. Команда test
- •4.1.1. Условия проверки файлов
- •4.1.2. Условия проверки строк
- •4.1.3. Условия сравнения целых чисел
- •4.1.4. Сложные условия
- •4.2. Команда expr
- •4.3. Команда read
- •4.4.Условный оператор if
- •4.5. Оператор цикла for
- •4.6. Операторы цикла while и until
- •4.7. Оператор вызова case
- •4.8. Функции в shell
- •4.9. Контрольные вопросы
- •5. Создание сценария командного процессора
- •5.1. Пример простейшего сценария
- •5.2. Основные этапы разработки сценария
- •5.3. Отладка командных процедур
- •5.4. Выполнение shell–программ
- •5.5. Создание новых команд
- •5.6. Контрольные вопросы
- •Список литературы
- •Оглавление
- •Акуленок Ирина Николаевна
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по достижения конца файла.