Введение в CGI





Переменные окружения


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

bash-2.01$ set bash=/bin/bash bash_versinfo=([0]="2" [1]="01" [2]="0" [3]="1" [4]="release" [5]="i386-pc-freebsd2.2.2") bash_version='2.01.0(1)-release' columns=106 dirstack=() euid=1010 ...

Здесь не приводится полный список всех переменных окружения. Показано только, как этот список отображается. Каждая переменная передается парой "имя=значение". При этом каждая такая пара записывается с новой строки. Попробуем распечатать все переменные окружения скрипта в виде HTML-таблицы, используя bash:

#!/usr/freeware/bin/bash echo Content-type: text/html echo echo '<HTML><HEAD></HEAD><BODY>' echo '<H1>переменные окружения</H1>' echo '<TABLE BORDER=1>' echo '<TR><TD>Имя</TD><TD>значение</TD></TR>' IFS='=' set | while read x y do echo '<TR><TD>'$x'</TD><TD>'$y'</TD></TR>' done echo '</TABLE>' echo '<HR>' echo '</BODY></HTML>'

Первой командой echo формируется предложение HTTP-заголовка. Вторая команда echo обеспечивает пропуск строки между заголовком HTTP-сообщения и его телом. Затем начинает формироваться тело HTML-документа. Обратите внимание на прямые одинарные кавычки "'". Они применяются для того, чтобы защитить от интерпретации угловые скобки "<" и ">", которые используются в bash для перенаправления стандартных потоков ввода/вывода.

Далее присваивается значение переменной окружения bash, которая не генерируется сервером HTTP — IFS. Переменная IFS хранит список символов-разделителей слов. По умолчанию это пробел и табуляция. Но нам нужно разделить имя переменной и его значения, которые на самом деле разделены символом "=".

Теперь вызываем команду set. При этом ее стандартный поток вывода перенаправляем при помощи "|" команде read, которая считывает строку из стандартного ввода, при этом присваивая переменным x и y значения последовательно от начала строки выделенных слов. А слова мы разделяем символом "=".

Читаем стандартный ввод в цикле while условие do.... done. В качестве условия все та же команда read — если считываем данные, то "истина", если нет, то — "ложь". При этом внутри цикла выводим строки таблицы "имя — значение".

B конце скрипта приводим документ к стандартному виду HTML-документа.

Обратиться к значению переменной окружения можно, конечно, гораздо проще — по имени:

#!/usr/freeware/bin/bash echo Content-type: text/html echo echo '<HTML><HEAD></HEAD><BODY>' echo '<H1>QUERY_STRING</H1>' echo QUERY_STRING = $QUERY_STRING echo '<HR>' echo '</BODY></HTML>'

Здесь по команде echo будет просто распечатано значение переменной окружения   QUERY_STRING.


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

bash-2.01$ set bash=/bin/bash bash_versinfo=([0]="2" [1]="01" [2]="0" [3]="1" [4]="release" [5]="i386-pc-freebsd2.2.2") bash_version='2.01.0(1)-release' columns=106 dirstack=() euid=1010 ...

Здесь не приводится полный список всех переменных окружения. Показано только, как этот список отображается. Каждая переменная передается парой "имя=значение". При этом каждая такая пара записывается с новой строки. Попробуем распечатать все переменные окружения скрипта в виде HTML-таблицы, используя bash:

#!/usr/freeware/bin/bash echo Content-type: text/html echo echo '<HTML><HEAD></HEAD><BODY>' echo '<H1>переменные окружения</H1>' echo '<TABLE BORDER=1>' echo '<TR><TD>Имя</TD><TD>значение</TD></TR>' IFS='=' set | while read x y do echo '<TR><TD>'$x'</TD><TD>'$y'</TD></TR>' done echo '</TABLE>' echo '<HR>' echo '</BODY></HTML>'

Первой командой echo формируется предложение HTTP-заголовка. Вторая команда echo обеспечивает пропуск строки между заголовком HTTP-сообщения и его телом. Затем начинает формироваться тело HTML-документа. Обратите внимание на прямые одинарные кавычки "'". Они применяются для того, чтобы защитить от интерпретации угловые скобки "<" и ">", которые используются в bash для перенаправления стандартных потоков ввода/вывода.

Далее присваивается значение переменной окружения bash, которая не генерируется сервером HTTP — IFS. Переменная IFS хранит список символов-разделителей слов. По умолчанию это пробел и табуляция. Но нам нужно разделить имя переменной и его значения, которые на самом деле разделены символом "=".

Теперь вызываем команду set. При этом ее стандартный поток вывода перенаправляем при помощи "|" команде read, которая считывает строку из стандартного ввода, при этом присваивая переменным x и y значения последовательно от начала строки выделенных слов. А слова мы разделяем символом "=".

Читаем стандартный ввод в цикле while условие do.... done. В качестве условия все та же команда read — если считываем данные, то "истина", если нет, то — "ложь". При этом внутри цикла выводим строки таблицы "имя — значение".

B конце скрипта приводим документ к стандартному виду HTML-документа.

Обратиться к значению переменной окружения можно, конечно, гораздо проще — по имени:

#!/usr/freeware/bin/bash echo Content-type: text/html echo echo '<HTML><HEAD></HEAD><BODY>' echo '<H1>QUERY_STRING</H1>' echo QUERY_STRING = $QUERY_STRING echo '<HR>' echo '</BODY></HTML>'

Здесь по команде echo будет просто распечатано значение переменной окружения   QUERY_STRING.



Содержание раздела