KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программы » Д. Колисниченко - Ubuntu 10. Краткое руководство пользователя

Д. Колисниченко - Ubuntu 10. Краткое руководство пользователя

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Д. Колисниченко, "Ubuntu 10. Краткое руководство пользователя" бесплатно, без регистрации.
Перейти на страницу:

# /etc/shells: valid login shells

/bin/csh

/bin/sh

/usr/bin/es

/usr/bin/ksh

/bin/ksh

/usr/bin/rc

/usr/bin/tcsh

/bin/tcsh

/usr/bin/esh

/bin/dash

/bin/bash

/bin/rbash

/usr/bin/screen

С точки зрения пользователя, указанные оболочки мало чем отличаются. И все они позволяют выполнять введенные пользователем команды. Но оболочки используются не только для выполнения команд, а еще и для автоматизации задач с помощью сценариев. Так вот, все эти оболочки отличаются синтаксисом языка описания сценариев. В этой главе мы поговорим о создании bash-сценариев, поскольку оболочка bash самая популярная.

При запуске оболочка bash выполняет сценарий. bashrc, находящийся в домашнем каталоге пользователя. В этом файле можно указать команды, которые нужно выполнить сразу после входа пользователя в систему. Данный файл не обязателен и может отсутствовать.

В файле. bash_history (тоже находится в домашнем каталоге) хранится история команд, введенных пользователем. Так что вы можете просмотреть свои же команды, которые вы накануне вводили.

22.2. Автоматизация задач с помощью bash

Представим, что нам нужно выполнить резервное копирование всех важных файлов, для чего создать архивы каталогов /etc, /home и /usr. Понятно, что понадобятся три команды вида:

tar — cvjf имя_архива. tar.bz2 каталог

Затем требуется записать все эти три файла на DVD с помощью любой программы для прожига DVD.

Если выполнять данную операцию раз в месяц (или хотя бы раз в неделю), то особого труда это не составит. Но представьте, что вам нужно делать это каждый день или даже несколько раз в день? Думаю, такая рутинная работа вам быстро надоест. А ведь можно написать сценарий, который сам будет создавать резервные копии и записывать их на DVD! Все, что от вас потребуется, — это вставить чистый DVD перед запуском сценария.

Можно пойти и иным путем. Написать сценарий, который будет делать резервные копии системных каталогов и записывать их на другой раздел жесткого диска. Ведь не секрет, что резервные копии делаются не только на случай сбоя системы, но и для защиты от некорректного изменения данных пользователем. Помню, как-то я удалил важную тему форума и попросил своего хостинг-провайдера сделать откат. Я был приятно удивлен, когда мне предоставили на выбор три резервные копии — осталось лишь выбрать наиболее подходящую. Не думаете же вы, что администраторы провайдера только и занимались тем, что три раза в день копировали домашние каталоги пользователей? Поэтому автоматизация — штука полезная, и любому администратору нужно знать, как автоматизировать свою рутинную работу.

22.3. Привет, мир!

По традиции напишем первый сценарий, выводящий всем известную фразу: «Привет, мир!» (Hello world!). Вся работа со сценариями выполняется обычно в консоли (или в терминале), но для редактирования сценариев вы можете использовать любимый графический редактор, например, kedit (листинг 22.2).

Листинг 22.2. Первый сценарий

#!/bin/bash

echo "Привет, мир!"

Первая строка нашего сценария — это указание, что он должен быть обработан программой /bin/bash. Обратите внимание — если между # и ! окажется пробел, то данная директива не сработает, поскольку будет воспринята как обычный комментарий. Комментарии начинаются, как вы уже догадались, с решетки:

# Комментарий

Вторая строка — это оператор echo, выводящий нашу строку. Сохраните сценарий под именем hello и введите команду:

$ chmod +x hello

Для запуска сценария введите команду:

./hello

На экране вы увидите строку:

Привет, мир!

Чтобы вводить для запуска сценария просто hello (без ./), сценарий нужно скопировать в каталог /usr/bin (точнее, в любой каталог из переменной окружения PATH):

# cp./hello /usr/bin

22.4. Использование переменных в собственных сценариях

В любом серьезном сценарии вы не обойдетесь без использования переменных. Переменные можно объявлять в любом месте сценария, но до места их первого применения. Рекомендуется объявлять переменные в самом начале сценария, чтобы потом не искать, где вы объявили ту или иную переменную.

Для объявления переменной используется следующая конструкция:

переменная=значение

Пример объявления переменной:

ADDRESS=www.dkws.org.ua

echo $ADDRESS

Обратите внимание на следующие моменты:

□ при объявлении переменной знак доллара не ставится, но он обязателен при использовании переменной;

□ при объявлении переменной не должно быть пробелов до и после знака =.

Значение для переменной указывать вручную не обязательно — его можно прочитать с клавиатуры:

read ADDRESS

или со стандартного вывода программы:

ADDRESS='hostname'

Чтение значения переменной с клавиатуры осуществляется с помощью инструкции read. При этом указывать символ доллара не нужно. Вторая команда устанавливает в качестве значения переменной ADDRESS вывод команды hostname.

В Linux часто используются переменные окружения. Это специальные переменные, содержащие служебные данные. Вот примеры некоторых часто используемых переменных окружения:

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, понятно, не ограничено.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*