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

<p><strong>Пример A-12. Файл с первым поколением для игры "Жизнь"</strong></p>

# Это файл-пример, содержащий "поколение 0", для сценария "life.sh".

# --------------------------------------------------------------

# Игровое поле имеет размер 10 x 10, точкой обозначается "живая" особь,

#+ символом подчеркивания -- пустая ячейка. Мы не можем использовать пробелы,

#+ для обозначения пустых ячеек, из-за особенностей строения массивов в Bash.

# [Упражнение для читателей: объясните, почему?.]

#

# Строки, начинающиеся с символа '#' считаются комментариями, сценарий их игнорирует.

__.__..___

___._.____

____.___..

_._______.

____._____

..__...___

____._____

___...____

__.._..___

_..___..__

+++

Следующие два сценария предоставил Mark Moraes, из университета в Торонто. См. файл "Moraes-COPYRIGHT", который содержит указание на авторские права.

<p><strong>Пример A-13. behead: Удаление заголовков из электронных писем и новостей</strong></p>

#! /bin/sh

# Удаление заголовков из электронных писем и новостей т.е. до первой

# пустой строки

# Mark Moraes, Университет в Торонто

# ==> Такие комментарии добавлены автором документа.

if [ $# -eq 0 ]; then

# ==> Если входной аргумент не задан (файл), то выводить результат на stdin.

sed -e '1,/^$/d' -e '/^[ ]*$/d'

# --> Удалить пустые строки и все строки предшествующие им

else

# ==> Если аргумент командной строки задан, то использовать его как имя файла.

for i do

sed -e '1,/^$/d' -e '/^[ ]*$/d' $i

# --> То же, что и выше.

done

fi

# ==> Упражнение: Добавьте проверку на наличие ошибок.

# ==>

# ==> Обратите внимание -- как похожи маленькие сценарии sed, за исключением передачи аргумента.

# ==> Можно ли его оформит в виде функции? Почему да или почему нет?

<p><strong>Пример A-14. ftpget: Скачивание файлов по ftp</strong></p>

#! /bin/sh

# $Id: ftpget,v 1.2 91/05/07 21:15:43 moraes Exp $

# Сценарий устанавливает анонимное соединение с ftp-сервером.

# Простой и быстрый - написан как дополнение к ftplist

# -h -- удаленный сервер (по-умолчанию prep.ai.mit.edu)

# -d -- каталог на сервере - вы можете указать последовательность из нескольких ключей -d

# Если вы используете относительные пути,

# будьте внимательны при задании последовательности.

# (по-умолчанию -- каталог пользователя ftp)

# -v -- "многословный" режим, будет показывать все ответы ftp-сервера

# -f -- file[:localfile] скачивает удаленный file и записывает под именем localfile

# -m -- шаблон для mget. Не забудьте взять в кавычки!

# -c -- локальный каталог

# Например,

# ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh \

# -d ../pub/R3/fixes -c ~/fixes -m 'fix*'

# Эта команда загрузит файл xplaces.shar из ~ftp/contrib с expo.lcs.mit.edu

# и сохранит под именем xplaces.sh в текущем каталоге, затем заберет все исправления (fixes)

# из ~ftp/pub/R3/fixes и поместит их в каталог ~/fixes.

# Очевидно, что последовательность ключей и аргументов очень важна, поскольку

# она определяет последовательность операций, выполняемых с удаленным ftp-сервером

#

# Mark Moraes ([email protected]), Feb 1, 1989

#

# ==> Эти комментарии добавлены автором документа.

# PATH=/local/bin:/usr/ucb:/usr/bin:/bin

# export PATH

# ==> Первые две строки в оригинальном сценарии вероятно излишни.

TMPFILE=/tmp/ftp.$$

# ==> Создан временный файл

SITE=`domainname`.toronto.edu

# ==> 'domainname' подобен 'hostname'

usage="Порядок использования: $0 [-h удаленный_сервер] [-d удаленный_каталог]... [-f удаленный_файл:локальный_файл]... \

[-c локальный_каталог] [-m шаблон_имен_файлов] [-v]"

ftpflags="-i -n"

verbflag=

set -f # разрешить подстановку имен файлов (globbing) для опции -m

set x `getopt vh:d:c:m:f: $*`

if [ $? != 0 ]; then

echo $usage

exit 65

fi

shift

trap 'rm -f ${TMPFILE} ; exit' 0 1 2 3 15

echo "user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}"

# ==> Добавлены кавычки (рекомендуется).

echo binary >> ${TMPFILE}

for i in $* # ==> Разбор командной строки.

do

case $i in

-v) verbflag=-v; echo hash >> ${TMPFILE}; shift;;

-h) remhost=$2; shift 2;;

-d) echo cd $2 >> ${TMPFILE};

if [ x${verbflag} != x ]; then

echo pwd >> ${TMPFILE};

fi;

shift 2;;

-c) echo lcd $2 >> ${TMPFILE}; shift 2;;

-m) echo mget "$2" >> ${TMPFILE}; shift 2;;

-f) f1=`expr "$2" : "\([^:]*\).*"`; f2=`expr "$2" : "[^:]*:\(.*\)"`;

echo get ${f1} ${f2} >> ${TMPFILE}; shift 2;;

--) shift; break;;

esac

done

if [ $# -ne 0 ]; then

echo $usage

exit 65 # ==> В оригинале было "exit 2", изменено в соответствии со стандартами.

fi

if [ x${verbflag} != x ]; then

ftpflags="${ftpflags} -v"

fi

if [ x${remhost} = x ]; then

remhost=prep.ai.mit.edu

# ==> Здесь можете указать свой ftp-сервер по-умолчанию.

fi

echo quit >> ${TMPFILE}

# ==> Все команды сохранены во временном файле.

ftp ${ftpflags} ${remhost} < ${TMPFILE}

# ==> Теперь обработать пакетный файл.

rm -f ${TMPFILE}

# ==> В заключение, удалить временный файл (можно скопировать его в системный журнал).

# ==> Упражнения:

# ==> ----------

# ==> 1) Добавьте обработку ошибок.

# ==> 2) Добавьте уведомление звуковым сигналом.

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

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

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

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

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

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

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

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

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