Ubuntu 10. Краткое руководство пользователя
Шрифт:
HOME — домашний каталог пользователя, который запустил сценарий;
RANDOM — случайное число в диапазоне от 0 до 32 767;
UID — ID пользователя, который запустил сценарий;
PWD — текущий каталог.
Для установки собственной переменной окружения используется команда export:
# присваиваем переменной значение
$ADDRESS=www.dkws.org.ua
# экспортируем переменную — делаем ее переменной окружения
# после этого переменная ADDRESS будет доступна в других сценариях export $ADDRESS
22.5. Передача параметров сценарию
Очень
$0 — содержит имя сценария;
$n — содержит значение параметра (n — номер параметра);
$# — позволяет узнать количество параметров, которые были переданы.
Рассмотрим небольшой пример обработки параметров сценария. Я понимаю, что конструкцию case-esac мы еще не рассматривали, но общий принцип должен быть понятен (листинг 22.3).
Думаю, приведенных комментариев достаточно, поэтому подробно рассматривать работу сценария из листинга 22.2 не будем.
22.6. Массивы и bash
Интерпретатор bash позволяет использовать массивы. Массивы объявляются подобно переменным. Вот пример объявления массива:
ARRAY[0]=1
ARRAY[1]=2
echo $ARRAY[0]
22.7. Циклы
Как и в любом языке программирования, в bash можно использовать циклы. Мы рассмотрим циклы for и while, хотя вообще в bash доступны также циклы until и select, но они применяются довольно редко.
Синтаксис цикла for выглядит так:
for переменная in список do
команды
done
В цикле при каждой итерации переменной будет присвоен очередной элемент списка, над которым будут выполнены указанные команды. Чтобы было понятнее, рассмотрим небольшой пример:
for n in 1 2 3;
do
echo $n;
done
Обратите внимание — список значений и список команд должны заканчиваться точкой с запятой.
Как и следовало ожидать, наш сценарий выведет на экран следующее:
1
2
3
Синтаксис цикла while выглядит немного иначе:
while условие
do
команды
done
Цикл while выполняется до тех пор, пока истинно заданное условие. Подробно об условиях мы поговорим в следующем разделе, а сейчас напишем аналог предыдущего цикла, то есть нам нужно вывести 1, 2 и 3, но с помощью while, а не for:
n=1
while [$n — lt 4]
do
echo "$n"
n=$(($n+1));
done
22.8. Условные операторы
В bash доступны два условных оператора — if и case. Синтаксис оператора if следующий:
Оператор if в bash работает аналогично оператору if в других языках программирования. Если истинно первое условие, то выполняется первый список команд, иначе —
проверяется второе условие и т. д. Количество блоков elif, понятно, не ограничено.Самая ответственная задача — это правильно составить условие. Условия записываются в квадратных скобках. Вот пример записи условий:
# переменная N = 10
[N==10]
# переменная N не равна 10
[N!=10]
Операции сравнения указываются не с помощью привычных знаков > или <, а с помощью следующих выражений:
— lt — меньше;
— gt — больше;
— le — меньше или равно;
— ge — больше или равно;
— eq — равно (используется вместо ==).
Применять данные выражения нужно следующим образом:
[переменная выражение значение | переменная]
Например:
# N меньше 10
[$N — lt 10]
# N меньше A
[$N — lt $A]
В квадратных скобках вы также можете задать выражения для проверки существования файла и каталога:
— e файл — условие истинно, если файл существует;
— d каталог — условие истинно, если каталог существует;
— x файл — условие истинно, если файл является исполнимым.
С оператором case мы уже немного знакомы, но сейчас рассмотрим его синтаксис подробнее:
case переменная in
значение_1) команды_1;;
…
значение_^ команды_N;;
*) команды_по_умолчанию;;
esac
Значение указанной переменной по очереди сравнивается с приведенными значениями (значение_1…, значение_N). Если есть совпадение, то будут выполнены команды, соответствующие значению. Если совпадений нет, то будут выполнены команды по умолчанию. Пример использования case был приведен в листинге 22.3.
Глава 23
Восстановление системы после сбоя
23.1. Локализация причины сбоя
Всему есть своя причина — сбой не происходит сам по себе. Причиной может стать либо ошибка программного обеспечения, либо отказ «железа». Исходя из этого, различают программные и аппаратные сбои. Последние можно смело назвать аппаратно-программными, поскольку из-за отказа аппаратуры довольно часто происходят программные сбои. Самый простой пример — отказ винчестера, вследствие которого программа не может записать или прочитать данные, и происходит программный сбой. При некорректной работе оперативной памяти происходят порой сложнообъяснимые ошибки программного обеспечения.
23.2. Программный сбой
Прежде всего, нужно выяснить и по возможности устранить причину сбоя. Если это сугубо программный сбой, то причины две: неправильная настройка программы (или системы) и ошибка программы.
23.2.1. Неправильная настройка программы или системы
Как работала система до сбоя? Встречался ли подобный сбой раньше? Если ничего такого ранее вы не наблюдали и система работала как швейцарские часики, значит, скорее всего, причина в неправильной ее настройке. Вспомните, какие файлы конфигурации вы изменяли (или какие параметры устанавливали с помощью графических конфигураторов). Просто по памяти восстановите исходные значения и перезапустите сервис или службу, ставшую причиной сбоя, — возможно, проблема решится. Рекомендуется перед каким-либо изменением, вносимым в файл конфигурации системы, делать его резервную копию. Потом вам же будет проще восстановить исходные значения. Можно рекомендовать и другой подход — закомментировать прежние директивы/значения файла конфигурации, а новые писать под ними. В случае вашей ошибки вы всегда сможете восстановить исходные значения.