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), и, по-умолчанию, разрешает управление заданиями. Пользователь имеет возможность взаимодействия с оболочкой.
Сценарий всегда запускается в неинтерактивном режиме. Но, не смотря на это, он сохраняет доступ к своему tty. И даже может эмулировать интерактивный режим работы.
#!/bin/bash MY_PROMPT='$ ' while : do echo -n "$MY_PROMPT" read line eval "$line" done
exit 0
# Этот сценарий, как иллюстрация к вышесказанному, предоставлен # Stephane Chazelas (спасибо).
Будем считать интерактивным такой сценарий, который может принимать ввод от пользователя, обычно с помощью команды read (см. Пример 11-2). В "реальной жизни" все намного сложнее. Пока же, будем придерживаться предположения о том, что интерактивный сценарий ограничен рамками tty, с которого сценарий был запущен пользователемa, т.е консоль или окно xterm.
Сценарии начальной инициализации системы не являются интерактивными, поскольку они не предполагают вмешательство человека в процессе своей работы.