Чтение онлайн

на главную - закладки

Жанры

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

Купер Мендель

Шрифт:

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

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

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

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 # Имена кодов ошибок -- в верхнем регистре,

# к тому же, их желательно дополнять префиксом "E_".

if [ !
– e "$filename" ]

then

echo "Файл $filename не найден."

exit $E_NOTFOUND

fi

MAIL_DIRECTORY=/var/spool/mail/bozo # Имена переменных окружения

# так же желательно записывать символами

# в верхнем регистре.

export MAIL_DIRECTORY

GetAnswer # Смешивание символов верхнего и нижнего решистров

# удобно использовать для имен функций.

{

prompt=$1

echo -n $prompt

read answer

return $answer

}

GetAnswer "Ваше любимое число? "

favorite_number=$?

echo $favorite_number

_uservariable=23 # Допустимо, но не рекомендуется.

# Желательно, чтобы пользовательские переменные не начинались с символа подчеркивания.

# Так обычно начинаются системные переменные.

Используйте смысловые имена для кодов завершения.

E_WRONG_ARGS=65

...

...

exit $E_WRONG_ARGS

См. так же Приложение C.

Разделяйте большие сложные сценарии на серию более коротких и простых модулей. Пользуйтесь функциями. См. Пример 34-4.

Не пользуйтесь сложными конструкциями, если их можно заменить простыми.

COMMAND

if [ $?
– eq 0 ]

...

# Избыточно и неинтуитивно.

if COMMAND

...

# Более понятно и коротко.

... читая исходные тексты сценариев на Bourne shell (/bin/sh). Я был потрясен тем, насколько непонятно и загадочно могут выглядеть очень простые алгоритмы из-за неправильного оформления кода. Я не раз спрашивал себя: "Неужели кто-то может гордиться таким кодом?"

Landon Noll

Глава 33. Разное

Практически никто не знает грамматики Bourne shell-а. Даже изучение исходных текстов не дает ее полного понимания.

Tom Duff

33.1. Интерактивный и неинтерактивный режим работы

В интеракивном режиме, оболочка читает команды, вводимые пользователем, с устройства tty. Кроме того, такая оболочка считывает конфигурационные файлы на запуске, выводит строку приглашения к вводу (prompt), и, по-умолчанию, разрешает управление заданиями. Пользователь имеет возможность взаимодействия с оболочкой.

Поделиться:
Популярные книги

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Лишняя дочь

Nata Zzika
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Лишняя дочь

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Боги, пиво и дурак. Том 6

Горина Юлия Николаевна
6. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 6

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

Болотник 2

Панченко Андрей Алексеевич
2. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 2

Камень Книга двенадцатая

Минин Станислав
12. Камень
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Камень Книга двенадцатая

Небо для Беса

Рам Янка
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Небо для Беса

Надуй щеки! Том 4

Вишневский Сергей Викторович
4. Чеболь за партой
Фантастика:
попаданцы
уся
дорама
5.00
рейтинг книги
Надуй щеки! Том 4