Российский государственный гуманитарный университет
Опубликован: 15.08.2003 | Доступ: свободный | Студентов: 6495 / 1481 | Оценка: 3.91 / 3.79 | Длительность: 06:55:00
Лекция 2:

Введение в программирование CGI-скриптов и программирование скриптов на bash

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >
Аннотация: В этой лекции подробно разбираются особенности программирования CGI-скриптов, общие принципы программирования CGI-скриптов на bash, определяются правила вызова скрипта, передачи ему данных и получение результатов работы скрипта для дальнейшего использования в HTTP-обмене и генерации HTML-страниц.

При обсуждении обмена данными между клиентом и сервером в Web-технологии логично было бы рассмотреть вопросы разработки прикладного программного обеспечения на стороне сервера. Как правило, это CGI-скрипты.

К наиболее популярным средствам разработки таких скриптов относятся:

  • shell (командный язык);
  • Perl;
  • С.

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

Командные языки являются тем первым инструментом программирования, который попадает в руки любого пользователя. В Windows это cmd (речь идет об Windows NT или Windows 95), в Unix — различного рода shell. cmd оставим для учебных курсов Microsoft и сосредоточимся на командных языках Unix.

Среди различных командных языков оболочек (shell) выберем тот, который является общим для большинства Unix-платформ — GNU bash (Bourne Again Shell). Прообраз bash — самый первый shell ( sh ), поэтому bash наследует многие его свойства.

Для программирования CGI-скриптов bash удобен тем, что наглядно демонстрирует многие свойства окружения среды Unix, которые используются и в других системах программирования. Кроме того, часто программирование на командном языке применяется для сравнительных описаний программ разработанных на С или Perl.

Структура bash-скрипта

Для того чтобы выполнить bash -скрипт, требуется интерпретатор bash. При этом скрипт запускается HTTP-сервером и, в общем случае, не определяет его операционное окружение (точнее, оно определяется окружением сервера). По этой причине в начале файла скрипта следует указать, что для его исполнения требуется интерпретатор bash:

#!/usr/local/bin/bash
echo Hello BASH

Первая строчка этой записи указывает на то, что содержание файла будет рассматриваться как программа (скрипт) на bash. Кстати, bash эту конструкцию также воспринимает как запуск программы интерпретации содержимого файла, поэтому в процессе выполнения скрипта для отдельных операций можно вызывать другие скрипты со своими интерпретаторами.

В общем случае символ "#" рассматривается как начало комментария, который распространяется до конца строки. При программировании скриптов его чаще всего приходится употреблять для маскирования строк программы во время отладки.

Более bash -скрипт ничем не выделяется. Команды bash обычно вводятся каждая на отдельной строке. Если это по каким-то причинам затруднительно, то команды разделяются символом ";". Исключение составляют конвейеры: в них команды находятся в пределах одной строки и разделены символом "|".

При программировании на bash нужно четко различать команды, встроенные в bash, и команды операционной системы. Например, echo — это команда операционной системы, а letвстроенная команда bash.

Стандартный поток вывода

Собственно, сам командный язык bash не имеет механизма организации вывода данных. Среди встроенных в bash команд нет команды печати. Но зато можно воспользоваться командами Unix. Самой простой из них является команда echo, которая копирует свои аргументы в поток стандартного вывода. При этом объединять разные слова во фразу каким-либо образом не нужно:

bash>echo Perl meets CGI
Perl meets CGI
bash>

В данном случае echo вывела три своих аргумента и символ перевода строки — приглашение (prompt) bash находится на новой строке.

На первый взгляд, такое простое решение для стандартного вывода кажется примитивным. На самом деле, его вполне достаточно для генерации HTML-страниц. Механизмы, которые делают echo в совокупности с bash эффективным средством генерации отчетов в HTML-формате, таковы:

  • подстановка переменных (substitution);
  • маскирующие кавычки (quoting);
  • подстановка результатов выполнения команд.

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

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

echo first_arg#$1 second_arg#$2

В данном случае распечатываются первый и второй аргументы командной строки скрипта. Другой пример — распечатка переменной окружения:

echo QUERY_STRING:$QUERY_STRING

Quoting используется для маскирования специальных значений некоторых символов. Такие символы называют метасимволами. Например: ">" и "<" — это символы перенаправления потоков ввода-вывода и, следовательно, их надо маскировать при выводе. Для такого маскирования проще всего использовать простые одинарные кавычки:

echo '<H1>QUOTING</H1>'

В данном случае мы напечатаем заголовок первого уровня в HTML-документе. При маскировании следует помнить, что внутри кавычек bash не выполняет интерпретации кода скрипта, поэтому переменные внутрь одинарных кавычек вставлять нельзя:

echo '<H1>'$QUERY_STRING'</H1>'

В данном случае строка вывода будет состоять из трех частей: тега начала заголовка, значения переменной QUERY_STRING и тега конца заголовка.

Подстановка результата выполнения команды осуществляется с использованием обратных кавычек (традиционный вариант) или формы $ (command). При этом в строку вывода включается значение, которое возвращает выполненная команда:

echo '<H1>'`date`'</H1>'

или

echo '<H1>'$(date)'</H1>'

Таким образом можно вставлять не только отдельные команды, но и целые последовательности команд. Главное, чтобы эта последовательность что-нибудь возвращала.

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >