Сценарии оболочки — самый простой и доступный метод автоматизации решения часто встречающихся задач. Сложно представить пользователя Linux, который никогда не прибегал к подобному способу, поскольку он не требует навыков программирования на каком-либо сложном языке и доступен даже начинающим пользователям.
Если задать на специализированном форуме какой-то вопрос, то почти наверняка более опытные пользователи поделятся собственным скриптом, решающим либо точно такую же, либо похожую задачу. Умение читать и писать сценарии — одно из базовых для успешной работы с Linux.
Но несмотря на видимую простоту написать действительно хороший скрипт значительно сложнее, чем кажется на первый взгляд. Популяризатор Linux Аарон Кили разместил на сайте Tecmint.com несколько практических советов начинающему пользователю.
Даже в очень коротких сценариях следует использовать подробные и понятные всем комментарии. Эту общепринятую в других видах программирования практику необходимо применять везде.
Дело даже не в том, что хорошими сценариями хочется поделиться, а без комментариев посторонним людям будет сложнее разобраться в его работе. Рано или поздно сам автор может забыть, что именно выполняет каждая команда. Тем более, что времени это требует немного.
Иногда сценарий оболочки будет работать, даже если какая-то команда не выполняется или выполняется ошибочно. Это не обязательно следствие ошибки автора — подобная ситуация может возникнуть после обновления системы, когда синтаксис той или иной используемой в скрипте программы изменился.
Чтобы этого избежать, необходимо предусмотреть возможность аварийного выхода из сценария. Подобный приём также применяется в «серьёзных» программах.
Аналогичная ситуация может возникнуть, когда сценарий пытается использовать необъявленную переменную. И на этот случай необходимо предусмотреть возможность его завершения.
Для ссылок на переменные необходимо использовать двойные кавычки (в специальной литературе также можно встретить названия «частичные кавычки» или «нестрогие кавычки»). Это связано с тем, что интерпретатор воспринимает одиночные кавычки как обычный набор символов и не производит подстановку.
Как и в больших программах, в скриптах рекомендуется использовать функции. Разумеется, на работу это никак не влияет, но текст становится удобным для чтения и редактирования.
Нетрудно заметить, что Кили уделяет особое внимание именно удобству чтения. Концепция Open Source предполагает, что у пользователя есть потребность делиться с другими людьми результатами своего труда. Даже когда поклонник Linux что-то делает для себя, то подразумевается, что это может быть нужно не только ему.
Bash — очень своеобразный язык. Например, операторы сравнения строк «=» и «==» — синонимы. Поэтому, если у пользователя нет каких-то веских причин применять второй, то делать этого не нужно.
Также Кили советует шире применять подстановку команды. В частности, использовать её вместо обратных одиночных кавычек, внутрь которых помещается текст командной строки. Результат будет тем же самым.
Статические переменные эксперт рекомендует использовать в режиме «только для чтения». Особенно если речь идёт о содержимых файлов /etc/passwd или /etc/group.
Чтобы избежать конфликтов имён, следует использовать прописные буквы для переменных окружения и строчные для пользовательских переменных. К тому же так удобнее читать текст сценария.
Наконец, в длинных скриптах целесообразно использовать режим отладки, иначе поиск ошибок может превратится в настоящий кошмар. И в этом смысле сценарий практически ничем не отличается от «настоящей» программы.