
- •Тема 1. Основы Unix
- •Структура unix
- •Сравнение Windows 2000 и Unix
- •Сравнение FreeBsd и Linux
- •Командные интерпретаторы Unix
- •Тема 2. Команды интерпретатора
- •2.1 Команды работы с файловой системой
- •2.2 Создание ссылок
- •2.3 Конвейеры и перенаправление ввода-вывода
- •Тема 3. Сценарии
- •3.1 Редактирование исходных файлов
- •3.2 Работа с командным интерпретатором
- •3.3 Переменные
- •3.4 Взаимодействие с пользователем
- •3.5 Арифметические операции в сценариях
- •Тема 4. Операторы сценариев
- •4.1 Операторы цикла
- •4.2 Другие операторы
- •4.3 Арифметические операторы and и or
- •Код завершения
- •Файловые дескрипторы
- •Отладка сценариев
- •4.7 Запись команд
- •Использование специальных символов
- •Тема 5. Файловая система FreeBsd
- •Разделы жесткого диска
- •5.2 Файловые системы
- •Монтирование файловых систем
- •Блоки и индексные дескрипторы
- •5.5 Пользователи и группы
- •5.6 Права доступа к файлам и каталогам
- •5.7 Добавление и удаление учетных записей пользователей
- •5.8 Управление процессами
- •Тема 6. Работа с файлами в Unix
- •6.2 Файловые функции Unix
- •6.3 Пример программы для обработки файла
- •Тема 7. Межмашинное взаимодействие
- •7.1 Сокеты
- •7.2 Функции для программирования сокетов
- •Тема 8. Программирование процессов
- •8.1 Информация о процессах
- •8.2 Создание порожденного процесса
- •8.3 Программные каналы
- •Тема 9. Web и Ftp сервисы
- •9.1 Конфигурирование Web-сервера
- •9.2 Конфигурирование ftp-сервера
- •Подключение к Internet
Тема 4. Операторы сценариев
4.1 Операторы цикла
Цикл while. Цикл while выполняет операторы до тех пор, пока условие цикла является истинным.
Пример. Вывод на экран целых чисел от 1 до 20:
#!/bin/sh
i=1
while [ $i -le 20 ]
do
echo $i
i=`expr $i + 1`
done
Здесь квадратные скобки представляют собой сокращенную запись команды test.
Операторы сравнения команды test:
-eq = -gt > -lt <
-ne ≠ -ge ≥ -le ≤
Пробел между скобками и тестируемым условием является обязательным.
Все выражения между do и done являются телом цикла.
Цикл until. Цикл until по смыслу противоположен while, он выполняется, пока условие не станет истинным.
Предыдущая программа будет делать то же самое, если третью строку заменить на
until [ $i -gt 20 ]
Условия в циклах while и until можно комбинировать с помощью операций && (and) и | | (or).
Например:
[ $varA -eq 1 ] && [ $varB -gt 7 ]
Цикл for. Цикл for содержит переменную, которая при каждой итерации получает очередной элемент из списка. Цикл продолжается, пока список не будет исчерпан.
Пример:
for i in one two three
do
echo $i
done
Если в этом примере после in записать *, будут выведены имена всех файлов.
В условиях описанных выше циклов можно использовать слова true и false. С их помощью. можно организовать бесконечный цикл.
Для программного прерывания циклов используются операторы break и continue.
Оператор break прерывает цикл немедленно:
while true
do
echo “text”
break
done
Оператор continue заставляет перейти цикл к началу.
4.2 Другие операторы
Оператор shift Аргументы командной строки хранятся в переменных от $1 до $9. Каждый запуск команды shift сдвигает значения аргументов на одну позицию влево и отбрасывает первый. Другими словами, информация, записанная в $1, отбрасывается, значение переменной $2 присваивается переменной $1 и т.д.
Пример:
while [ $# -ne 0 ]
do
echo “Value \$1 is $1”
shift
done
Условный оператор if.
Пример:
if [ $# -ge 1 ]
then
echo “$# arguments”
else
echo “Usage: $0 file1 file2 …”
exit 1
fi
Если в командной строке меньше одного аргумента, оператор if сообщает пользователю, как запускать программу.
Оператор case.
Пример:
echo “Delete file?”
read a
case $a in
n*) break;;
y*) rm file
break;;
esac
В данном случае, если пользователь отвечает y или yes, файл file1 удаляется, если n или no, файл остается в каталоге.
4.3 Арифметические операторы and и or
Пусть имеются команды A и B. Запись A && B означает следующее.
Нужно выполнить команды A и B. Но если A невыполнима, то не нужно выполнять и B.
Пример
tar cf arh.tar a.txt && rm a.txt
Запись A | | B означает следующее: если A невыполнима, выполнить B.
Но если A завершилась успешно, B не выполнять.
Пример
tar cf arh.tar a.txt | | echo “Error”
Код завершения
Большинство программ в Unix по окончанию работы возвращают код завершения. При успешном завершении зто 0. Числа отличные от 0, кака правило, указывают на ошибку.
В сценариях для возврата кода используется оператор exit.Если код не указан явно, программа выполняет код последней выполненной команды.
Код завершения хранится в переменной $?
Пример вывода кода
ls
echo $?
Пример использования кода для принятия решения
if tar cf arh.tar a.txt
then
rm a.txt
else
echo “Error”
fi
Пример с командой test, опция –f означает проверку существования файла
if [ -f program.conf ]
then . . .