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

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

# Альтернативный вариант.

var=`echo "один два три"`

set -- $var

a=$1; b=$2; c=$3

echo "-------"

echo "a = $a" # a = один

echo "b = $b" # b = два

echo "c = $c" # c = три

# На этот раз все в порядке.

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

# Обратите внимание: в подоболочке 'read', для первого варианта, переменные присваиваются нормально.

# Но только в подоболочке.

a=aaa # Все сначала.

b=bbb

c=ccc

echo; echo

echo "один два три" | ( read a b c;

echo "Внутри подоболочки: "; echo "a = $a"; echo "b = $b"; echo "c = $c" )

# a = один

# b = два

# c = три

echo "-------"

echo "Снаружи: "

echo "a = $a" # a = aaa

echo "b = $b" # b = bbb

echo "c = $c" # c = ccc

echo

exit 0

Огромный риск, для безопасности системы, представляет использование в скриптах команд, с установленным битом "suid"[ 61 ].

Использование сценариев в качестве CGI-приложений может приводить к серьезным проблемам из-за отсутствия контроля типов переменных. Более того, они легко могут быть заменены взломщиком на его собственные сценарии.

Bash не совсем корректно обрабатывает строки, содержащие двойной слэш (//).

Сценарии на языке Bash, созданные для Linux или BSD систем, могут потребовать доработки, перед тем как они смогут быть запущены в коммерческой версии UNIX. Такие сценарии, как правило, используют GNU-версии команд и утилит, которые имеют лучшую функциональность, нежели их аналоги в UNIX. Это особенно справедливо для таких утилит обработки текста, как tr.

Danger is near thee --

Beware, beware, beware, beware.

Many brave hearts are asleep in the deep.

So beware --

Beware.

A.J. Lamb and H.W. Petrie

<p><strong>Глава 32. Стиль программирования</strong></p>

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

Ниже приводится несколько рекомендаций по оформлению сценариев, однако их не следует рассматривать как Официальное Руководство.

<p><strong>32.1. Неофициальные рекомендации по оформлению сценариев</strong></p>

 Комментируйте свой код. Это сделает ваши сценарии понятнее для других, и более простыми, в обслуживании, для вас.

 PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"

 # Эта строка имела некоторый смысл в момент написания,

 # но через год-другой будет очень тяжело вспомнить -- что она делает.

 # (Из сценария "pw.sh", автор: Antek Sawicki)

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

#!/bin/bash

#************************************************#

# xyz.sh #

# автор: Bozo Bozeman #

# Июль 05, 2001 #

# #

# Удаление файлов проекта. #

#************************************************#

BADDIR=65 # Нет такого каталога.

projectdir=/home/bozo/projects # Каталог проекта.

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

# cleanup_pfiles () #

# Удаляет все файлы в заданном каталоге. #

# Параметры: $target_directory #

# Возвращаемое значение: 0 -- в случае успеха, #

# $BADDIR -- в случае ошибки. #

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

cleanup_pfiles ()

{

if [ ! -d "$1" ] # Проверка существования заданного каталога.

then

echo "$1 -- не является каталогом."

return $BADDIR

fi

rm -f "$1"/*

return 0 # Успешное завершение функции.

}

cleanup_pfiles $projectdir

exit 0

Не забывайте начинать ваш сценарий с sha-bang -- #!/bin/bash.

 Заменяйте повторяющиеся значения константами. Это сделает ваш сценарий более простым для понимания и позволит вносить изменения, не опасаясь за его работоспособность.

 if [ -f /var/log/messages ]

 then

 ...

 fi

 # Представьте себе, что через пару лет

 # вы захотите изменить /var/log/messages на /var/log/syslog.

 # Тогда вам придется отыскать все строки,

 # содержащие /var/log/messages, и заменить их на /var/log/syslog.

 # И проверить несколько раз -- не пропустили ли что-нибудь.

 # Использование "констант" дает лучший способ:

 LOGFILE=/var/log/messages # Если и придется изменить, то только в этой строке.

 if [ -f "$LOGFILE" ]

 then

 ...

 fi

 В качестве имен переменных и функций выбирайте осмысленные названия.

 fl=`ls -al $dirname` # Не очень удачное имя переменной.

 file_listing=`ls -al $dirname` # Уже лучше.

 MAXVAL=10 # Пишите имена констант в верхнем регистре.

 while [ "$index" -le "$MAXVAL" ]

 ...

 E_NOTFOUND=75 # Имена кодов ошибок -- в верхнем регистре,

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

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

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

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

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

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

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

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

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