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

if [ $# -ne "$ARGS" ] # Требуется два аргумента командной строки.

then

Param_Error

fi

Parse_Date $1

check_date $day $month $year # Проверка даты.

strip_leading_zero $day # Удалить ведущие нули

day=$? # в номере дня и/или месяца.

strip_leading_zero $month

month=$?

day_index $day $month $year

date1=$?

abs $date1 # Абсолютное значение

date1=$value

Parse_Date $2

check_date $day $month $year

strip_leading_zero $day

day=$?

strip_leading_zero $month

month=$?

day_index $day $month $year

date2=$?

abs $date2 # Абсолютное значение

date2=$value

calculate_difference $date1 $date2

abs $diff # Абсолютное значение

diff=$value

echo $diff

exit 0

# Сравните этот сценарий с реализацией формулы Гаусса на C

# http://buschencrew.hypermart.net/software/datedif

<p><strong>Пример A-9. Создание "словаря"</strong></p>

#!/bin/bash

# makedict.sh [создание словаря]

# Модификация сценария /usr/sbin/mkdict.

# Авторские права на оригинальный сценарий принадлежат Alec Muffett.

#

# Этот модифицированный вариант включен в документ на основе

#+ документа "LICENSE" из пакета "Crack"

#+ с которым распространяется оригинальный сценарий.

# Этот скрипт обрабатывает текстовые файлы и создает отсортированный список

#+ слов, найденных в этих файлах.

# Он может оказаться полезным для сборки словарей

#+ и проведения лексикографического анализа.

E_BADARGS=65

if [ ! -r "$1" ] # Необходим хотя бы один аргумент --

then #+ имя файла.

echo "Порядок использования: $0 имена_файлов"

exit $E_BADARGS

fi

# SORT="sort" # Необходимость задания ключей сортировки отпала.

#+ Изменено, по отношению к оригинальному сценарию.

cat $* | # Выдать содержимое файлов на stdout.

tr A-Z a-z | # Преобразовать в нижний регистр.

tr ' ' '\012' | # Новое: заменить пробелы символами перевода строки.

# tr -cd '\012[a-z][0-9]' | # В оригинальном сценарии: удалить все символы,

#+ которые не являются буквами или цифрами.

tr -c '\012a-z' '\012' | # Вместо удаления

#+ неалфавитно-цифровые символы заменяются на перевод строки.

sort |

uniq | # Удалить повторяющиеся слова.

grep -v '^#' | # Удалить строки, начинающиеся с "#".

grep -v '^$' # Удалить пустые строки.

exit 0

<p><strong>Пример A-10. Расчет индекса "созвучности"</strong></p>

#!/bin/bash

# soundex.sh: Расчет индекса "созвучности"

# =======================================================

# Сценарий Soundex

# Автор

# Mendel Cooper

# [email protected]

# 23 Января 2002 г.

#

# Условия распространения: Public Domain.

#

# Несколько отличающаяся версия этого сценария была опубликована

#+ Эдом Шэфером (Ed Schaefer) в Июле 2002 года в колонке "Shell Corner"

#+ "Unix Review" on-line,

#+ http://www.unixreview.com/documents/uni1026336632258/

# =======================================================

ARGCOUNT=1 # Требуется аргумент командной строки.

E_WRONGARGS=70

if [ $# -ne "$ARGCOUNT" ]

then

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

exit $E_WRONGARGS

fi

assign_value () # Присвоить числовые значения

{ #+ символам в имени.

val1=bfpv # 'b,f,p,v' = 1

val2=cgjkqsxz # 'c,g,j,k,q,s,x,z' = 2

val3=dt # и т.п.

val4=l

val5=mn

val6=r

# Попробуйте разобраться в том, что здесь происходит.

value=$( echo "$1" \

| tr -d wh \

| tr $val1 1 | tr $val2 2 | tr $val3 3 \

| tr $val4 4 | tr $val5 5 | tr $val6 6 \

| tr -s 123456 \

| tr -d aeiouy )

# Символам в имени присваиваются числовые значения.

# Удаляются повторяющиеся числа, если они не разделены гласными.

# Гласные игнорируются, если они не являются разделителями, которые удаляются в последнюю очередь.

# Символы 'w' и 'h' удаляются в первую очередь.

}

input_name="$1"

echo

echo "Имя = $input_name"

# Перевести все символы в имени в нижний регистр.

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

name=$( echo $input_name | tr A-Z a-z )

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

# Начальный символ в индекса "созвучия": первая буква в имени.

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

char_pos=0 # Начальная позиция в имени.

prefix0=${name:$char_pos:1}

prefix=`echo $prefix0 | tr a-z A-Z`

# Первую букву в имени -- в верхний регистр.

let "char_pos += 1" # Передвинуть "указатель" на один символ.

name1=${name:$char_pos}

# ++++++++++++++++++++++++++++ Исключение отдельных ситуаций +++++++++++++++++++++++++++++++

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

# Если второй символ в имени совпадает с первым

#+ то его нужно отбросить.

# Кроме того, мы должны проверить -- не является ли первый символ

#+ гласной, 'w' или 'h'.

char1=`echo $prefix | tr A-Z a-z` # Первый символ -- в нижний регистр.

assign_value $name

s1=$value

assign_value $name1

s2=$value

assign_value $char1

s3=$value

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

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

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

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

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

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

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

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

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