Андрей Робачевский - Операционная система UNIX
- Название:Операционная система UNIX
- Автор:
- Жанр:
- Издательство:BHV - Санкт-Петербург
- Год:1997
- Город:Санкт-Петербург
- ISBN:5-7791-0057-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Андрей Робачевский - Операционная система UNIX краткое содержание
Книга посвящена семейству операционных систем UNIX и содержит информацию о принципах организации, идеологии и архитектуре, объединяющих различные версии этой операционной системы.
В книге рассматриваются: архитектура ядра UNIX (подсистемы ввода/вывода, управления памятью и процессами, а также файловая подсистема), программный интерфейс UNIX (системные вызовы и основные библиотечные функции), пользовательская среда (командный интерпретатор shell, основные команды и утилиты) и сетевая поддержка в UNIX (протоколов семейства TCP/IP, архитектура сетевой подсистемы, программные интерфейсы сокетов и TLI).
Для широкого круга пользователей
Операционная система UNIX - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Установим позиционные параметры равными значениям полей вывода программы who(1)
if [ "$9" = "S" ]
Девятое поле вывода — предыдущий уровень выполнения системы; символ 'S' означает однопользовательский режим
then
echo Система загружается
elif [ "$7" = "2" ]
Седьмое поле — текущий уровень
echo Переход на уровень выполнения 2
else
echo Переход на уровень выполнения 3
fi
Данный фрагмент скрипта проверяет уровень выполнения, с которого система совершила переход, и текущий уровень выполнения системы. Соответствующие сообщения выводятся на консоль администратора. В этом фрагменте условие генерируется командой test , эквивалентной (и более наглядной) формой которой является "[]". Команда test является наиболее распространенным способом генерации условия для оператора if .
Команда test
Команда test имеет следующий синтаксис:
test выражение
или
[ выражение ]
Команда вычисляет логическое выражение (табл. 1.10) и возвращает 0, если выражение истинно, и 1 в противном случае.
Таблица 1.10. Выражения, используемые в команде test
Выражения с файлами | |
---|---|
-s file |
Размер файла file больше 0 |
-r file |
Для файла file разрешен доступ на чтение |
-w file |
Для файла file разрешен доступ на запись |
-x file |
Для файла file разрешено выполнение |
-f file |
Файл file существует и является обычным файлом |
-d file |
Файл file является каталогом |
-с file |
Файл file является специальным файлом символьного устройства |
-b file |
Файл file является специальным файлом блочного устройства |
-р file |
Файл file является поименованным каналом |
-u file |
Файл file имеет установленный флаг SUID |
-g file |
Файл file имеет установленный флаг SGID |
-k file |
Файл file имеет установленный флаг sticky bit |
Выражения со строками | |
-z string |
Строка string имеет нулевую длину |
-n string |
Длина строки string больше 0 |
string1 = string2 |
Две строки идентичны |
string1 != string2 |
Две строки различны |
Сравнение целых чисел | |
i1 -eq i2 |
i1 равно i2 |
i1 -ne i2 |
i1 не равно i2 |
i1 -lt i2 |
i1 строго меньше i2 |
i1 -le i2 |
i1 меньше или равно i2 |
i1 -gt i2 |
i1 строго больше i2 |
i1 -ge i2 |
i1 больше или равно i2 |
Более сложные выражения могут быть образованы с помощью логических операторов:
! выражение |
Истинно, если выражение ложно (оператор NOT) |
выражение1 -а выражение2 |
Истинно, если оба выражения истинны (оператор AND) |
выражение1 -o выражение2 |
Истинно, если хотя бы одно из выражений истинно (оператор OR) |
Приведем несколько примеров использования выражений.
Фрагмент скрипта, используемый при регистрации нового пользователя. Скрипт проверяет наличие в домашнем каталоге инициализационного скрипта .profileи в случае его отсутствия копирует шаблон:
if [ ! -f $НОМЕ/.profile ]
then
echo "файла .profile не существует - скопируем шаблон"
cp /usr/lib/mkuser/sh/profile $НОМЕ/.profile
fi
Фрагмент скрипта, проверяющего наличие новой почты в почтовом ящике пользователя
if [ -s $MAIL ]
then
echo "Пришла почта"
fi
Фрагмент скрипта инициализации системы — запуска "суперсервера" Internet inetd(1M) . Если исполняемый файл /etc/inetdсуществует, он запускается на выполнение.
if [ -х /etc/inetd ]
then
/etc/inetd
echo "запущен сервер inetd"
fi
Фрагмент скрипта, анализирующий ввод пользователя, сохраненный в переменной ANSW. Если пользователь ввел 'N' или 'n', скрипт завершает свою работу.
if [ "$ANSW" = "N" -о "$ANSW" = "n" ]
then
exit
fi
Циклы
Язык программирования Bourne shell имеет несколько операторов цикла. Приведем их синтаксис:
1) while условие
do
command1
command2
...
done
2) until условие
do
command1
command2
...
done
3) for var in список
do
command1
command2
...
done
С помощью оператора while команды command1
, command2
и т.д. будут выполняться, пока условие
не станет ложным. Как и в случае с оператором if , условие
генерируется кодом возврата команды, например, test
.
В случае оператора until команды command1
, command2
и т.д. будут выполняться, пока условие
не станет истинным.
Оператор for обеспечивает выполнение цикла столько раз, сколько слов в списке
. При этом переменная var
последовательно принимает значения, равные словам из списка. Список может формироваться различными способами, например как вывод некоторой команды (` имя_команды_формирующей_список `) или с помощью шаблонов shell.
В другой форме for , когда список отсутствует, переменная var принимает значения позиционных параметров, переданных скрипту.
Чтобы наглядно представить себе приведенные операторы, обратимся к конкретным примерам.
Например, скрипт монтирования всех файловых систем /etc/mounallдля системы Solaris 2.5 включает в себя их проверку, исходя из данных, указанных в файле / etc/vfsck. При этом используется оператор while .
#
cat /etc/vfsck |
while read special fsckdev mountp fstype fsckpass automnt mntopts
# Построчно считывает записи файла vfsck и присваивает переменным spe-
# cial, fsckdev и т.д. значения соответствующих конфигурационных полей.
do
case $special in
'# ' * | '' ) # Игнорируем комментарии
continue ;;
'-') # Игнорируем строки, не требующие действия
continue ;;
esac
# Последовательно проверяем файловые системы с помощью утилиты
# /usv/sbin/fsck
/usr/sbin/fsck -m -F $fstype $fsckdev >/dev/null 2>&1
Интервал:
Закладка: