- •И.Н.Акуленок
- •Утверждено советом университета
- •Введение
- •Глава 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.1.2. Экспорт переменных
Вновь создаваемые переменные локальны, т.е. эффективны только в пределах текущего экземпляра. Для распространения действия значений этих shell-переменных на процессы-потомки они должны быть отмечены как внешние с помощью командыexport, которая является встроенной командойshell'a.
Например,
$ export u
Переменная uпомечается как внешняя и существует вплоть до окончания работыshell’a.
Например,
$ echo $u
UNIX
$ ksh
$ echo $u
UNIX
$ u=AIX
$ echo $u
AIX
$ (Ctrl–D) (Возвращение в родительский
командный процессор)
$ echo $u
UNIX
На основании этого примера можно сделать два вывода:
во–первых, чтобы подпроцессор узнал о существовании переменной, нужно экспортировать ее имя;
во–вторых, даже когда имя экспортируется, любые присваивания, сделанные в подпроцессоре, остаются локальными для дочернего процесса.
Правило, согласно которому командные подпроцессоры не могут изменять значения переменных, установленных в родительском командном процессоре, имеет фундаментальное значение. Оно напоминает концепцию локальных и глобальных переменных, которую можно встретить в большинстве языков программирования.
Команда exportбез аргументов сообщает все ранее установленные переменные.
3.2. Специальные символы
Shellразличает 4 различных символа клавиатуры, которые трактуются как кавычки:
двойные кавычки (");
апостроф (‘);
символ обратной наклонной черты (\);
обратный апостроф (`).
Каждая из этих кавычек имеет специальное и отличное от остальных значение.
3.2.1. Использование двойных кавычек и апострофа
Значение двойных кавычек заключается в том, что любой символ, который имеет для shell'a специальное значение (например,*,?,<,>,>>,|), поставленный в двойные кавычки, утрачивает свой специальный статус. Исключениями здесь являются символ $, обратный апостроф и обратная наклонная черта.
Например,
$ echo *"*"‘*‘
file1 file2 file3 * *
В первом случае shellзаменяет звездочку на имена всех файлов в каталоге. Во втором случае двойные кавычки отменяют специальное значение символа*.
Переменная, которая находится в апострофах, ее значение неподставляется в качестве результата.
Например,
$ var=hello
$ echo $var "$var" ‘$var‘
hello hello $var
$ echo "var = $var"
var = hello
Если необходимо присвоить переменной значение, содержащее пробелы, знаки табуляции и символы новой строки, то оно должно быть заключено в одиночные кавычки.
3.2.2. Обратные апострофы
Выражения, заключенные в обратные кавычки, воспринимаются как команды, которые должны выполняться командным процессором, и результирующее значение выполненной команды будет заменять заключенное в обратные кавычки выражение.
Например,
$ echo Today is `date`
Today is Mon Oct 31 11:45:24 EST 2013
Например,
$ pwd
$ /home/user1/c/doc
$ HERE=`pwd`
$ echo $HERE
/home/user1/c/doc
$ cd
$ cd $HERE
Например,
$ echo Your current directory is `pwd`
Your current directory is /home/user1
Например,
$ users=`who|wc –l`
$ echo There are $users users logged in
There are 5 users logged in
3.2.3. Обратная наклонная черта
Обратная наклонная черта, поставленная перед символом, ликвидирует его специальное значение для shell'a.
Например,
$ echo $users
$users
$ echo \\
\
Остаться в той же строке \с.После вывода последнего аргумента командаechoпереходит к следующей строке. Если необходимо остаться на той же самой строке, после обратного слэша ставиться символ\с.
Перемещение на следующую строку \n.Командаechoперемещает курсор в начало следующей строки, если за обратным слэшем стоит символ\n.
Например,
$ echo "one \ntwo \nthree \n \nCount"
one
two
three
Count
Перемещение до следующей позиции табуляции \t.Командаechoперемещает курсор на несколько символов вперед в этой же строке, если за обратным слэшем стоит символ\t.
Например,
$ echo "1 \t2 \t3 \t4 \t5"
1 2 3 4 5