Шрифт:
echo "<OPTION>$LINE"
Выбранный элемент присваивается переменной menu_selection. Ниже приводится сценарий, заполняющий элементы меню; действие формы не указывается.
$ pg populat.cgi
#!/bin/sh
#сценарий populat.cgi
#заполнение раскрывающегося списка значениями из текстового файла
echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<BODY>"
echo "<H4> CGI FORM….populat.cgi..populate pull-down list from a text
file</H4>"
echo "<SELECT NAME=menu_selecflon>"
echo "<OPTION>— PICK AN OPTION —"
# считывание значений из файла для заполнения опций списка
while read LINE
do
echo "<OPTION>$LINE" done < ../temp/list
echo "</SELECT>"
echo "</FORM>"
echo "</BODY>"
echo "</HTML>"
29.5.4. Автоматическое обновление Web–страницы
При использовании cgi для программирования заданий, выполняющих функции мониторинга либо контроля, часто бывает удобно выполнять обновление страниц в непрерывном режиме. Для этого вызывается пользовательский сценарий или страница. Ниже приводится тег, вызывающий выполнение сценария dfspace.cgi каждые 60 секунд.
<meta http-equiv="Refresh" content="60;URL=http:/linux.pc/cgi-bin/dfspace.cgi">"
Здесь ключевым словом является слово Refresh. Благодаря его использованию Web–сервер получает сведения о загрузке данной страницы, а строка "content=60" задает время (в секундах( между повторными загрузками. Для обновления сценария просто добавьте имя сценария в качестве части адреса URL.
В распоряжении автора имеются несколько контролирующих сценариев, выполняющих опрос всех основных хостов в сети. Благодаря их применению можно сразу же определить, какие хосты выполняются, а какие -oтключены. Более симпатичный вид сценарию придает использование в тексте вместо опций on и off зеленых и красных шариков.
Ниже приводится сценарий, использующий часть вывода df и отображающий файловую систему и количество полей в таблице.
Следующий сегмент кода реализует заголовок таблицы, в который помещаются наименования колонок. При использовании таблиц с неотформатированным выводом может происходить потеря данных.
echo "<TABLE align="center" cellspacing="20" border=9 width="40%"
cols="2">"
echo "<TH align="center">- Capacity % -</TH>"
echo "<TH align="center">- File System -</TH>"
Параметр cellspacing устанавливает расстояние между внутренними и внешними границами таблицы. Параметр border хранит число, определяющее толщину табличной рамки. Параметр col s определяет количество столбцов в таблице. Ниже приведена основная часть описываемого сценария.
df | sed 1d | awk '(print $5"\t"$6>' | while read percent mount
do
echo "<TR><TD align="center"><B>$percent</B></TD><TD align="center">$mount</TD></TR>"
done
С помощью команды df выполняется перенаправление посредством редактора sed для удаления заголовка, затем выполняется перенаправление к awk и считывание в пятом и шестом столбцах. Результаты присваиваются переменным percent и mount.
Аббревиатура TR обозначает строку таблицы, а TD — табличные данные. Тем самым определяется место, куда направляется информация.
Ниже приведен текст соответствующего сценария. Конечно, 60 секунд — это слишком много при мониторинге небольших файловых систем, но при перемещении большого количества файлов в файловых системах полезно отображать информацию об этом на протяжении целой минуты!
$ pg dfspace.cgi
#!/bin/sh
# сценарий dfspace.cgi
echo "Content-type: text/html"
echo ""
# автоматическое обновление каждые 60 секунд
echo "<meta http-equiv="Refresh" content="60;URL=http:/"linux.pc/cgi-bin/dfspace.cgi">"
echo "<HTML>"
echo "<HR>"
echo "<A NAME="LINUX. PC Filesystems">LINUX. PC Filesystems</A>"
echo "<TABLE align="center" cellspacing="20" border=9 width="40%"
cols="2">"
echo "<TH align="center">- Capacity % -</TH>"
echo "<TH align="center">- File System -</TH>"
# получение вывода из df, но сначала фильтруется нужная информация!
df | sed 1d | awk '{print $5"\t"$6}' | while read percent mount