Андрей Робачевский - Операционная система UNIX
- Название:Операционная система UNIX
- Автор:
- Жанр:
- Издательство:BHV - Санкт-Петербург
- Год:1997
- Город:Санкт-Петербург
- ISBN:5-7791-0057-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Андрей Робачевский - Операционная система UNIX краткое содержание
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей
Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Для разных командных интерпретаторов используются различные скрипты инициализации:
Командный интерпретатор | Скрипт инициализации |
---|---|
Bourne shell (sh) | .profile |
С shell (csh) | .login и .cshrc |
Korn shell (ksh) | .profile и .kshrc |
Bourne-Again shell (bash) | .profile и .bashrc |
Скрипты .profile и .login выполняются при первом входе в систему.
Скрипты .cshrc, .kshrc и .bashrc выполняются при каждом запуске интерпретатора.
4. Наконец, основная инициализация операционной системы происходит в результате выполнения скриптов shell. Если вам понадобится модифицировать процесс инициализации (например, добавить новый системный сервис), то придется заглянуть в эти скрипты.
Синтаксис языка Bourne shell
Любой из стандартных командных интерпретаторов имеет развитый язык программирования, позволяющий создавать командные файлы, или скрипты, для выполнения достаточно сложных задач. Следует, однако, иметь в виду, что shell является интерпретатором, он последовательно считывает команды из скрипта и выполняет их, как если бы они последовательно вводились пользователем с терминала. При таком характере работы трудно ожидать большой производительности от скриптов, однако их эффективность определяется простотой и наглядностью. Если же производительность программы играет главную роль, то самым эффективным средством по-прежнему остается язык программирования С.
В этом разделе приведены сведения о языке Bourne shell, достаточные, чтобы разобраться в системных скриптах и написать простейшие скрипты. Данное описание ни в коем случае не претендует на полное руководство по программированию на языке командного интерпретатора.
Общий синтаксис скрипта
Как уже было замечено, скрипт представляет собой обычный текстовый файл, в котором записаны инструкции, понятные командному интерпретатору. Это могут быть команды, выражения shell или функции. Командный интерпретатор считывает эти инструкции из файла и последовательно выполняет их.
Безусловно, как и в случае любого другого языка программирования, применение комментариев существенно облегчает последующее использование и модификацию написанной программы. В Bourne shell комментарии начинаются с символа '#':
# Этот скрипт выполняет поиск "мусора" (забытых временных
# файлов, файлов core и т.п.) в каталогах пользователей
Комментарии могут занимать не всю строку, а следовать после команды:
find /home -name core -print # Выполним поиск файлов core
Поскольку в системе могут существовать скрипты для различных интерпретаторов, имя интерпретирующей команды обычно помещается в первой строке следующим образом:
#!/bin/sh
В данном случае последующий текст скрипта будет интерпретироваться Bourne shell. Заметим, что при запуске скрипта из командной строки (для этого он должен обладать правом на выполнение — x), будет запущен новый командный интерпретатор, ввод команд для которого будет выполняться из файла скрипта.
Переменные
В командной строке или скрипте командного интерпретатора можно определить и использовать переменные. Значением переменной является строка, которая передается присвоением:
var= value
где var — имя переменной, a value — ее значение.
Значение переменной можно получить, используя знак. Например, вывести значение переменной name на экран можно с помощью команды echo следующим образом:
$ echo $name
Так же можно присвоить другой переменной (name1) значение переменной name:
$ name1=$name
Значение переменной можно присвоить иначе. Поскольку значение представляет собой строку, shell предоставляет удобный способ генерации строк из потока вывода команды. Синтаксис присвоения при этом следующий:
var=` command `
Так, например, где var — имя переменной, a command — название команды, команда pwd(1) выводит строку со значением текущего каталога:
$ pwd
/usr/home/andrei/test
Можно присвоить переменной cdir значение текущего каталога, которое сохранится в ней:
$ cdir=`pwd`
$ echo $cdir
/usr/home/andrei/test
$ cd /usr/bin
$ pwd
/usr/bin
$ cd $cdir
$ pwd
/usr/home/andrei/test
При использовании переменной, например var, командный интерпретатор подставляет вместо $var ее значение. Более сложные синтаксические конструкции получения значения переменной приведены в табл. 1.7.
Таблица 1.7. Способы получения значения переменной
$var |
Значение var; ничего, если переменная var не определена |
${var} |
То же, но отделяет имя переменной var от последующих символов |
${var:-string} |
Значение var, если определено; в противном случае — string. Значение var при этом не изменяется |
${var:=string} |
То же, но если переменная var не определена, ей присваивается значение строки string |
${var:?string} |
Если переменная var не определена, выводится строка string и интерпретатор прекращает работу. Если строка string пуста, то выводится сообщение var: parameter not set |
${var:+string} |
Строка string, если переменная var определена, в противном случае — ничего |
Приведем несколько примеров, используя команду echo:
$ var=user1
$ var1=user2
$ echo $var1
user2
$ echo ${var}l
user11
$ echo ${var1:+"do you want to redefine var?"}
do you want to redefine var?
Для нормальной работы в UNIX ряд переменных должен быть определен и зависит от тех приложений, с которыми вы работаете. Приведем несколько наиболее употребительных переменных:
Имя | Описание | Возможное значение |
---|---|---|
НОМЕ | Каталог верхнего уровня пользователя | /usr/'logname' [13] В данном примере утилита logname(1) выводит регистрационное имя пользователя, таким образом для пользователя andrei переменная НОМЕ примет следующее значение: /usr/andrei. |
PATH | Поисковый путь | /bin:/etc:/usr/bin:. |
Имя почтового ящика | /usr/spool/mail/'logname' | |
TERM | Имя терминала | ansi |
PS1 | Первичное приглашение shell | # |
PS2 | Вторичное приглашение shell | > |
Начальное окружение вашего сеанса устанавливается программой login(1) исходя из записей в файле паролей, и имеет следующий вид:
Переменная окружения | Поле файла паролей |
---|---|
HOME= домашний_каталог | 6 |
LOGNAME= зарегистрированное_имя | 1 |
PATH=/usr/bin: | - |
SHELL= интерпретатор_сеанса | 7 |
MAIL=/var/mail/ зарегистрированное_имя | 1 |
TZ= временная_зона | определено системой |
Переменная НОМЕ в основном используется в команде cd , которая служит для перехода в каталог:
Читать дальшеИнтервал:
Закладка: