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
В 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.1. Неправильная настройка программы или системы
Как работала система до сбоя? Встречался ли подобный сбой раньше? Если ничего такого ранее вы не наблюдали и система работала как швейцарские часики, значит, скорее всего, причина в неправильной ее настройке. Вспомните, какие файлы конфигурации вы изменяли (или какие параметры устанавливали с помощью графических конфигураторов). Просто по памяти восстановите исходные значения и перезапустите сервис или службу, ставшую причиной сбоя, — возможно, проблема решится. Рекомендуется перед каким-либо изменением, вносимым в файл конфигурации системы, делать его резервную копию. Потом вам же будет проще восстановить исходные значения. Можно рекомендовать и другой подход — закомментировать прежние директивы/значения файла конфигурации, а новые писать под ними. В случае вашей ошибки вы всегда сможете восстановить исходные значения.
Читать дальше
Конец ознакомительного отрывка
Купить книгу