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

# Сценарий должен запускаться с привилегиями root (что бы иметь право на запись в /var/log).

ROOT_UID=0 # Привилегии root имеет только пользователь с $UID = 0.

E_NOTROOT=67 # Код завершения, если не root.

if [ "$UID" -ne "$ROOT_UID" ]

then

echo "Сценарий должен запускаться с привилегиями root."

exit $E_NOTROOT

fi

FD_DEBUG1=3

FD_DEBUG2=4

FD_DEBUG3=5

# Раскомментарьте одну из двух строк, ниже, для активизации сценария.

# LOG_EVENTS=1

# LOG_VARS=1

log() # Запись даты и времени в файл.

{

echo "$(date) $*" >&7 # Добавляет в конец файла.

# См. ниже.

}

case $LOG_LEVEL in

1) exec 3>&2 4> /dev/null 5> /dev/null;;

2) exec 3>&2 4>&2 5> /dev/null;;

3) exec 3>&2 4>&2 5>&2;;

*) exec 3> /dev/null 4> /dev/null 5> /dev/null;;

esac

FD_LOGVARS=6

if [[ $LOG_VARS ]]

then exec 6>> /var/log/vars.log

else exec 6> /dev/null # Подавить вывод.

fi

FD_LOGEVENTS=7

if [[ $LOG_EVENTS ]]

then

# then exec 7 >(exec gawk '{print strftime(), $0}' >> /var/log/event.log)

# Строка, выше, не работает в Bash, версии 2.04.

exec 7>> /var/log/event.log # Добавление в конец "event.log".

log # Записать дату и время.

else exec 7> /dev/null # Подавить вывод.

fi

echo "DEBUG3: beginning" >&${FD_DEBUG3}

ls -l >&5 2>&4 # command1 >&5 2>&4

echo "Done" # command2

echo "sending mail" >&${FD_LOGEVENTS} # Написать "sending mail" в дескр. #7.

exit 0

<p><strong>Глава 17. Встроенные документы</strong></p>

Встроенный документ (here document) является специальной формой перенаправления ввода/вывода, которая позволяет передать список команд интерактивной программе или команде, например ftp, telnet или ex. Конец встроенного документа выделяется "строкой-ограничителем", которая задается с помощью специальной последовательности символов <<. Эта последовательность -- есть перенаправление вывода из файла в программу, напоминает конструкцию interactive-program < command-file, где command-file содержит строки:

command #1

command #2

...

Сценарий, использующий "встроенный документ" для тех же целей, может выглядеть примерно так:

#!/bin/bash

interactive-program <

command #1

command #2

...

LimitString

В качестве строки-ограничителя должна выбираться такая последовательность символов, которая не будет встречаться в теле "встроенного документа".

Обратите внимание: использование встроенных документов может иногда с успехом применяться и при работе с неинтерактивными командами и утилитами.

<p><strong>Пример 17-1. dummyfile: Создание 2-х строчного файла-заготовки</strong></p>

#!/bin/bash

# Неинтерактивное редактирование файла с помощью 'vi'.

# Эмуляция 'sed'.

E_BADARGS=65

if [ -z "$1" ]

then

echo "Порядок использования: `basename $0` filename"

exit $E_BADARGS

fi

TARGETFILE=$1

# Вставить 2 строки в файл и сохранить.

#--------Начало встроенного документа-----------#

vi $TARGETFILE <

i

Это строка 1.

Это строка 2.

^[

ZZ

x23LimitStringx23

#----------Конец встроенного документа-----------#

# Обратите внимание: ^[, выше -- это escape-символ

#+ Control-V .

# Bram Moolenaar указывает, что этот скрипт может не работать с 'vim',

#+ из-за возможных проблем взаимодействия с терминалом.

exit 0

Этот сценарий, с тем же эффектом, мог бы быть реализован, основываясь не на vi, а на ex. Встроенные документы, содержащие команды для ex, стали настолько обычным делом, что их уже смело можно вынести в отдельную категорию -- ex-сценарии.

<p><strong>Пример 17-2. broadcast: Передача сообщения всем, работающим в системе, пользователям</strong></p>

#!/bin/bash

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных