Linux и UNIX: программирование в shell. Руководство разработчика
Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн
Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Создание простой формы
Создадим простую форму,_ реализующую ссылку из документа main.shtml на сценарий books.cgi.
Вставьте следующие две строки после последней записи ссылки, которая была создана в файле main.shtml:
<BR> Basic form using GET method <A HREF="/cgi‑bin/books.cgi" >Form1</A>
Теперь введите следующий код и сохраните его в файле books.cgi; не забудьте поместить этот файл в каталог cgi‑bin.
$ pg books.cgi
#!/bin/sh
# сценарий books.cgi
echo "Content‑type: text/html"
echo ""
echo "<HTML>"
echo "<BODY>"
# вызов books_result.cgi, затем пользователь щелкает на кнопке отправки
echo "<FORM action="/cgi‑bin/books_result.cgi" METHOD=GET>"
echo "<H4> CGI FORM</H4>"
#текстовое поле, результаты ввода присвоены переменной с именем 'contact' echo "Your Name: <INPUT NAME=contact SIZE=30><BR><BR>"
#раскрытие выбранного пункта меню, присвоенного переменной 'film'
echo "<SELECT NAME=film>"
echo "<OPTION>"-— Pick a Film --"
echo "<OPTION>A Few Good Men"
echo "<OPTION>Die Hard"
echo "<OPTION>Red October"
echo "<OPTION>The Sound Of Music"
echo "<OPTION>Boys In Company C"
echo "<OPTION>Star Wars"
echo "<OPTION>Star Trek"
echo "</SELECT>"
# раскрытие выбранного пункта меню, присвоенного переменной 'actor'
echo "<SELECT NAME=actor>"
echo "<OPTION>— Pick Your Favourite Actor —"
echo "<OPTION>Bruce Willis"
echo "<OPTION>Basil Rathbone"
echo "<OPTION>Demi Moore"
echo "<OPTION>Lauren Bacall"
echo "<OPTION>Sean Connery"
echo "</SELECT>"
echo "<BR><BR>"
# имена переменных флажков 'view_cine' и 'view_vid'
echo "Do you watch films at the..<BR>"
echo "<INPUT TYPE="Checkbox" NAME=view_cine> Cinema"
echo "<INPUT TYPE="Checkbox" NAME=view_vid> On video"
echo "<BR><BR>"
# результаты ввода, присвоенного переменной 'textarea'
echo "Tell what ls your best film, or just enter some comments<BR>"
echo "<TEXTAREA COLS="30" ROWS="4" NAME="textarea"></TEXTAREA>"
echo "<BR><INPUT TYPE=Submit VALUE="Send it">"
echo "<INPUT TYPE="reset" VALUE="clear Form">"
echo "</FORM>" echo "</BODY>" echo "</HTML>"
Действие form action выбирается, как только пользователь щелкнет на кнопке 'Send it', в результате чего вызывается сценарий books_result.cgi. В этом случае будет использоваться метод get.
В форме, код которой приведен выше, отображаются два текстовых поля, два раскрывающихся поля и два флажка.
Текстовое поле, предназначенное для ввода пользовательского имени, имеет длину 30 символов; результаты ввода присваиваются переменной contact.
Первое раскрывающееся меню обеспечивает выбор любимого пользовательского фильма; выбранная опция присваивается переменной film.
Второе раскрывающееся меню обеспечивает выбор любимого актера; выбранная опция присваивается переменной actor.
Можно установить один или оба флажка, выполнив щелчок мышью на требуемом варианте. Выбранные значения хранятся в переменных view_cine и view_vid. Если пользователь указывает один из флажков, переменные должны иметь значение "on".
Область текстового поля обеспечивает ввод большего количества строк текста, чем стандартное текстовое поле (текст, разбитый на 30 столбцов и 4 строки, в нашем случае(, а вся введенная информация присваивается переменной textarea.
Для отсылки данных в качестве типа ввода указывается слово submit. Чтобы очистить форму, щелкните на кнопке clear.
Введите следующий сценарий cgi, назовите его books_result.cgi и сохраните его в каталоге cgi‑bin.
$ pg books_result.cgi
#!/bin/sh
#сценарий books_result.cgi
#вывод на печать настроек web–сервера env для метода get
echo "Content‑type: text/html"
echo ""
echo "<HTML><PRE>"
echo "<PRE>"
echo " Results from a GET form"
echo "REQUEST_METHOD : $REQUEST_METHOD"
echo "QUERY STRING : $QUERY_STRING"
echо "</PRE></HTML>"
Сценарий отображает значения пары переменных cgi, query_strinG и request_method. Переменная Query_string будет хранить все данные в виде кодированной строки, которая отправлена формой, созданной с помощью сценария books.cgi. Переменная request_method сохраняет тип используемого метода; в данном случае будет выбран метод get. На рис. 29.7 показано, как выглядит форма, созданная с помощью сценария books.cgi.
Рис. 29.7. Форма cgi, использующая метод get
Теперь выполним ввод и отсылку некоторой информации (рис. 29.8). После щелчка на кнопке 'Send it' отображается страница, показанная на рис. 29.9. Значение переменной QUERY_string отображается только частично по причине большой длины строки. Ниже приведена строка, имеющая полную длину:
contact=David+Tansley&f ilm=The+So_md+Of+Music&actor=Bruce+Willis&view_cine=onS,view_vid=onbtextarea=%21%22%A3%A3%24%25 %24%25%5E*%5E%26*%28%29*%2 8%29%28*%OD%OAHow%27s+that+%21%21
Рис. 29.8. Выбор и ввод информации в форму
Рис. 29.9. Информация, отправленная формой, закодирована
Для пересланной информации необходимо иметь следующие поля, присвоенные
переменной query string, показанной выше:
Переменная
Значение переменной
contact
David Tan$1ey
film
The Sound of Music
actor
Bruce Willis
view cine
Если установлено значение on, то флажок выбран
view_vid
Если установлено значение on, то флажок выбран
textarea
!"%$%А*А&*о*о(*
How's that it!
Декодирование закодированной строки
После того как пользователь щелкнет на кнопке "submit", информация присваивается переменной query_string, а строка кодируется следующим образом: • Все пробелы заменяются знаками +.
• Все поля значений разделяются символами &.
• Все значения и соответствующие поля разделяются знаками =.
• Все символы и некоторые специальные символы представляются кодами %ху, где xy является шестнадцатеричным эквивалентом данного символа. При просмотре переменной QUERY_STRING можно заметить, что многие из этих символов представлены переменной textarea.
Протокол cgi определяет, что любые символы в форме %ху (где xy является шестнадцатеричным числом) могут быть преобразованы в эквивалентные символы ASCII. Эти шестнадцатеричные символы состоят из специальных символов &, %, +, =, (, ) и всех других символов, выходящих за рамки десятичного диапазона ASCII с границей 127. Например, символу ( соответствует эквивалент в виде %29.