Выбрать главу

ГЛАВА 25

Дальнейшее изучение конструкции "документ здесь"

При рассмотрении стандартного потока ввода и вывода, а также циклов while уже обсуждалась конструкция "документ здесь". Описывались методика пересылки электронной почты и способы формирования экранов меню, но существуют и другие способы применения конструкции "документ здесь".

В этой главе рассматриваются следующие темы:

   • скоростной метод создания файла;

   • меню с автоматизированными возможностями поиска;

   • передача файлов с помощью протокола ftp;

   • подключение к другим системам приложений.

Формат конструкции "документ здесь":

команда << слово

текст

слово

Чтобы вспомнить методы применения конструкции "документ здесь", рассмотрим принципы ее работы. Когда интерпретатор shell встречает символ <<, он ожидает встретить за ним разделитель (слово). Все, что следует за этим словом до следующего слова в строке, воспринимается как поток ввода. В качестве разделителя может служить любое слово.

Конструкция "документ здесь" может применяться при создании файла, выводе на экран списка файлов, сортировке списка файлов и при создании экранов.

25.1 Быстрый метод формирования файла

Ниже рассматривается быстрый метод формирования файла, содержащего некоторый текст:

$ cat >> myfile << NEWFILE

Введите какой‑нибудь текст, а по завершении ввода в новой строке просто укажите слово NEWFILE. В результате образуется файл myfile, содержащий этот текст.

Если файл с указанным именем существует, то вводимое содержимое добавляется в исходный файл.

При использовании клавиши [Tab] следует учитывать, что более ранние версии

командного интерпретатора не сохраняют значения символов табуляции. Для устранения этого недостатка введите дефис после двух угловых левых скобок, например:

cat >> myfile << - NEWFILE

25.2. Скоростной способ вывода документа на печать

Предположим, что нужно создать и вывести на экран небольшой документ, содержащий сообщение. Необязательно использовать редактор vi; вместо этого можно применить метод, показанный в следующем примере. Если после ввода символов QUICKDOC нажать клавишу [Return], документ пересылается на принтер.

$ lpr << QUICKDOC

**** INVITATION**** The Star Trek convention ls in town next week. Be there.

Ticket prices: (please phone)

QUICKDOC

25.3. Автоматизация меню

Несмотря на то что конструкция "документ здесь" успешно применяется для создания экранов меню, ее можно также использовать при автоматизации навигации по пунктам меню. В этом случае пользователю не придется вручную выбирать определенные опции.

Существует сценарий по работе с меню базы данных, который отвечает за резервное копирование баз данных и выполнение административных задач. Меню базы данных применяется в течение дня для выполнения резервирования базы данных и выполнения других административных задач. Если же было принято решение о том, что каждую ночь создаются резервные копии всех баз данных с помощью утилиты cron, отпадает необходимость в создании другого сценария.

В данном случае используется конструкция "документ здесь", причем для навигации по меню применяется сценарий syb_backup, использующий поток ввода. Ниже показан поток вывода для сценария меню syb_backup.

Главный экран меню, в котором выбран пункт 2, имеет следующий вид.

1: Admin Tasks

2: Sybase Backups

3: Maintenance Tasks Selection > 2

Второй экран меню с выбранным пунктом 3 выглядит так:

1: Backup A Single Database

2: Backup Selected Databases

3: Backup All Databases Selection > 3

Третий экран меню при нажатии клавиши [Y];

   1. dw_levels

   2. dw_based

   3. dw_aggs

Are You Sure You Wish To Backup [Y..N] : Y

Итак, как следует из экрана меню, для резервирования всех баз данных нужно ввести следующую информацию:

   • Название меню сценария, syb_backup.

   • Цифру 2.

   • Цифру 3.

   • Символ Y.

Ниже приводится сценарий, с помощью которого можно автоматически выделить резервные копии баз данных. При этом используется сценарий меню syb_backup:

$ pg auto.sybackup

#!/bin/sh

# задание пути

PATH=/usr/bin:/usr/sbin:/sybase/bin:$LOCALBIN

export PATH

#присваивается значение переменной

DSQUERY=COMET; export DSQUERY

устанавливается значение TERM с последующей инициализацией

TERM=vt220; export TERM

tput -T vt220 init

# журнальный файл для всего потока вывода

log_f=/logs/sql.backup.log