- •И.Н.Акуленок
- •Утверждено советом университета
- •Введение
- •Глава 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. Контрольные вопросы
- •Список литературы
- •Оглавление
- •Акуленок Ирина Николаевна
3.3. Позиционные переменные
Позиционные переменные имеют вид – $n, гдеn– целое число. Позиционными они называются потому, что их номера соответствуют позициям аргументов. Интерпретаторshellавтоматически присваивает значения следующим своим переменным:
$n– параметр в n–ой позиции;
$0– имя вызываемой команды;
$1– имя первого аргумента;
$2– имя второго аргумента;
$9– имя девятого аргумента.
Для доступа более чем к 9 аргументам применяется специальная команда shift.
$?– код завершения последней выполненной команды;
$$– идентификационный номер процессаshell;
$!– идентификационный номер последнего запущенного интерпретаторомshellфонового процесса;
$#– число параметров (аргументов), переданных вshell, исключая$0(имя команды);
$*– содержит все разделенные пробелами позиционные параметры командной строки, начиная с$1. Здесь нет ограничения в 9 аргументов;
$–– показывает флаги, переданные вshellпри его запуске или установленные командойset.
Эти переменные равнозначны переменным, создаваемым пользователем, но они могут быть установлены только интерпретатором shell.
Пример использования позиционных параметров и команды сдвига:
$ ls /etc /dev /usr /udd (Отработка команды)
$ echo $0 (Имя команды)
ls
$ echo $# (число аргументов)
4
$ echo $* (список исходных аргументов)
/etc /dev /usr /udd
$ shift (сдвиг аргументов)
$ echo $* (список аргументов после сдвига)
/dev /usr /udd
Дополнительное использование команды setзаключается в том, что она часто используется в командных процедурах для присвоения значений позиционным параметрам.
Например,
$ set alpha beta gamma
$ echo $1 $2 $3
alpha beta gamma
$ echo $#
3
$ echo $*
alpha beta gamma
Например,
$ cat number
echo Number of arguments is $#
echo They are: $*
$ number one two three
Number of arguments is 3
They are: one two three
3.4. Код завершения процесса
Завершение выполнения любой программы в ОС UNIX сопровождается выработкой некоторого значения кода завершения, который возвращается родительскому процессу. По коду завершения вызывающий процесс определяет, как завершилось выполнение команды – успешно или нет. Команды UNIX возвращают код0при положительном исходе и код, отличный от0(1,2и т.д.), если что-то было выполнено неправильно.
По принятому соглашению число, равное нулю, обозначается true(успешное выполнение), а число, отличное от нуля, обозначаетсяfalse(неуспешное завершение).Falseможет иметь несколько значений, и конкретное значение часто указывает причину, по которой процесс завершился неуспешно. Некоторые команды, например,grepиdiff, для каждой ошибки выдают особый ненулевой код (конкретные значения приведены в документации).
Для установления требуемого кода завершения интерпретатор shellимеет две специальные программы –trueиfalse, единственная функция которых состоит в формировании значений кодаtrue– нуля иfalse– единицы.
Интерпретатор помещает код завершения предыдущей команды в переменную ?. Ее значение можно получить, поставив перед именем знак доллара, как и в случае любой другой переменной.
Например, чтобы получить код завершения командtrue иfalse, можно использовать присвоение переменнымAиBкода их завершения:
$ true;A=$?
$ false;B=$?
$ echo $A $B
0 1
Как правило, код завершения не нужно выводить на экран. Существует несколько способов использования кода завершения одной команды, как условие выполнения следующей, которые будут рассмотрены в следующих главах.