Россия |
Введение в программирование CGI-скриптов и программирование скриптов на bash
Конвейеры
Одним из наиболее полезных свойств командных языков является организация конвейеров и перенаправление ввода/вывода. Под конвейером понимают последовательность программ (команд), соединенных друг с другом через ввод/вывод. Стандартный поток вывода первой программы подается на стандартный поток ввода второй программы, стандартный поток вывода второй программы, в свою очередь, подается на стандартный поток ввода третьей и т.д. Выглядит это примерно следующим образом:
ps -ax | grep httpd | wc -l
В данном случае вывод статистики об активных процессах подается на ввод фильтра grep, который выводит только те строки, где встречается программа httpd. В свою очередь, выход grep подается на вход счетчика строк (атрибут -l ), который в итоге сообщает, сколько в данный момент в системе крутится HTTP-серверов. Символы "|" как раз и обозначают конвейеризацию выполнения программ.
Кроме конвейеров, к стандартному вводу/выводу можно применять перенаправление. Так, символ "<" означает чтение из стандартного потока ввода, а символ ">" — вывод в файл. Этот метод стоит использовать при перенаправлении стандартного потока ошибок в стандартный поток вывода:
ls hhjhj > intuit 2>&1
В данном случае задана заведомо ошибочная с точки зрения синтаксиса команда. Стандартный вывод перенаправляется в файл "intuit", а стандартный поток ошибок перенаправляется в стандартный вывод и, следовательно, тоже попадает в файл "intuit".
Файлы и каталоги
Работа с файлами и каталогами в bash опирается на механизм перенаправления и команды Unix. Проверку состояния файлов удобно выполнять с помощью команды test. Для чтения данных из файла достаточно направить его содержимое в стандартный поток ввода:
Bash> intuit.cgi < intuit.txt
Можно для этих же целей построить конвейер:
Bash> cat intuit.txt | intuit.cgi
В данном случае команда cat читает данные из файла и передает их на поток стандартного ввода скрипта.
Для создания файлов в bash можно применять функцию копирования из пустого файла в нормальный файл:
bash>cp /dev/null intuit.txt
Для прохода по дереву каталогов используют команду cd, а получить список файлов с их атрибутами можно при помощи команды ls:
#!/usr/freeware/bin/bash echo Content-type: text/html echo echo '<HTML><HEAD></HEAD><BODY>' echo '<UL>' ls | while read x do if test -f $x; then echo '<LI><A HREF=./'$x'>'$x'</A>'; fi done echo '</UL>' echo '</BODY></HTML>'
В результате выполнения этого скрипта в HTML-документ будет вставлен фрагмент из отчета команды ls. При этом будут отображаться только регулярные (обыкновенные) файлы. Каталоги и специальные файлы в список файлов каталога не попадут.
Удалить файл можно при помощи команды rm "имя_файла", переименовать — mv "имя_старое" "имя_новое" и т.п. Все это типовые команды Unix.