Чтение онлайн

ЖАНРЫ

Ubuntu 10. Краткое руководство пользователя
Шрифт:

Использовать программу нужно так:

md5sum файл

Глава 22

Командный интерпретатор bash

22.1. Что нужно знать о bash

bash — это наиболее часто использующаяся командная оболочка (командный интерпретатор) Linux. Основное предназначение bash — выполнение команд, введенных пользователем. Пользователь вводит команду, bash ищет программу, соответствующую команде, в каталогах, указанных в переменной окружения PATH. Если такая программа найдена, то bash

запускает ее и передает ей введенные пользователем параметры. В противном случае выводится сообщение о невозможности выполнения команды.

Кроме bash существуют и другие оболочки: sh, csh, ksh, zsh и пр. Все командные оболочки, установленные в системе, прописаны в файле /etc/shells. Список оболочек может быть довольно длинным. В листинге 22.1 представлен файл /etc/shells дистрибутива Ubuntu 10.04 (установка по умолчанию).

Листинг 22.1. Файл /etc/shells дистрибутива Ubuntu 10.04

# /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 часто используются переменные окружения. Это специальные переменные, содержащие служебные данные. Вот примеры некоторых часто используемых переменных окружения:

Поделиться с друзьями: