ГЛАВА 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