Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 277


Пример 33-3. Сценарий-обертка вокруг сценария awk

#!/bin/bash

# Суммирует числа в заданном столбце из заданного файла.

ARGS=2 E_WRONGARGS=65

if [ $# -ne "$ARGS" ] # Проверка числа аргументов. then echo "Порядок использования: `basename $0` имя_файла номер_столбца" exit $E_WRONGARGS fi

filename=$1 column_number=$2

# Здесь используется прием передачи переменных # из командной оболочки в сценарий awk .

# Многострочный сценарий awk должен записываться в виде: awk ' ..... '

# Начало awk-сценария. # ----------------------------- awk '

{ total += $'"${column_number}"' } END { print total }

' "$filename" # ----------------------------- # Конец awk-сценария.

# С точки зрения безопасности, передача shell-переменных # во встроенный awk-скрипт, потенциально опасна, # поэтому, Stephane Chazelas предлагает следующую альтернативу: # --------------------------------------- # awk -v column_number="$column_number" ' # { total += $column_number # } # END { # print total # }' "$filename" # ---------------------------------------

exit 0

Для сценариев, которые должны строиться по принципу швейцарского армейского ножа -- "все в одном", можно порекомендовать Perl. Perl совмещает в себе мощь и гибкость sed, awk и языка программирования C. Он поддерживает модульность и объектно-ориентированный стиль программирования. Короткие сценарии Perl могут легко встраиваться в сценарии командной оболочки, и даже полностью заменить из (хотя автор весьма скептически относится к последнему утверждению).

Пример 33-4. Сценарий на языке Perl, встроенный в Bash-скрипт

#!/bin/bash

# Это команды shell, предшествующий сценарию на Perl. echo "Эта строка выводится средствами Bash, перед выполнением встроенного Perl-скрипта, в \"$0\"." echo "=============================================================================================="

perl -e 'print "Эта строка выводится средствами Perl.\n";' # Подобно sed, Perl тоже использует ключ "-e".




Содержание  Назад  Вперед