Практическое написание сценариев командной оболочки Bash: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Строка 69: Строка 69:


Материал этой книги написан в основном относительно Bash 4. Использовать командную оболочку меньшей версии крайне не рекомендуется из-за [[w:Bashdoor|проблем в безопасности старых версий]].
Материал этой книги написан в основном относительно Bash 4. Использовать командную оболочку меньшей версии крайне не рекомендуется из-за [[w:Bashdoor|проблем в безопасности старых версий]].

На момент написания книги автор использовал версию 4.4.19(1)-release.


=== Как читать эту книгу ===
=== Как читать эту книгу ===

Версия от 07:44, 7 октября 2021

Практическое написание сценариев командной оболочки Bash

Приемы программирования сценариев в Bash


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

В этом учебнике предполагается, что вы уже знакомы с основами синтаксиса языка Bash. Если это не так, то мы рекомендуем прочитать учебник Cooper, Mendel Искусство программирования на языке сценариев командной оболочки = Advanced Bash-Scripting Guide., который подробно рассказывает об основах синтаксиса языка.

Введение

Bash — это одна из наиболее популярных командных оболочек, являющихся клоном командной оболочки Bourne Shell. Во многих дистрибутивах Linux эта оболочка предустановлена по умолчанию и используется для интерактивного взаимодействия пользователя с системой, а также для автоматизации рутинных задач как самой системы, так и ее пользователей.

Рутинные повторяющиеся задачи пользователь оформляет в форме файлов-сценариев, которые могут быть переданы командной оболочке на исполнение. Сценарий — это программа, интерпретируемая Bash. Область применения Bash напрямую связана с системными задачами, но в принципе вы можете писать на нем не очень сложные приложения, связанные с формированием, например, отчетов; анализа данных; прототипов программ для демонстраций и др.

Язык сценариев Bash имеет следующие преимущества перед другими скриптовыми языками:

  • Самое очевидное — вам не нужен компилятор. Вы можете написать программу, запустить ее и увидеть результат сразу. Изменяя содержимое файла сценария, изменения применяются сразу же.
  • Как правило, Bash идет в поставке с дистрибутивом, т.е. вы можете начать пользоваться им сразу после установки операционной системы.
  • Язык сценариев Bash очень простой в освоении. Основные сложности языка связаны в основном с некоторыми особенностями интерпретации, которые требуют некоторой концентрации внимания у программиста.

Самым большим сдерживающим фактором применения синтаксиса Bash для написания сценариев является плохая портируемость. В целом, сценарии, которые используют только оригинальный синтаксис Bourne Shell, хорошо портируются между командными оболочками, которые ответвились от него.

Например, можно написать сценарий, который будет одинаково хорошо исполняться, вообще говоря, в разных командных оболочках Bash и Zsh. Но при этом приходится жертвовать использованием очень полезных расширений Bash, существенно упрощающих написание кода скрипта.

Даже в пределах одного мажорного номера, разные версии Bash могут интерпретировать некоторые конструкции по-разному, поэтому следует тщательно тестировать большие сценарии. Например сравните как выполняется следующий код в разных версиях Bash:

#!/bin/bash

echo "BASH VERSION = $BASH_VERSION"
echo "--------------------------------"
while read -r key val; do
    echo "$key = $val"
done <<< $(
  for key in alpha beta gamma; do
     for value in {1..3}; do
         printf "$key $value\n"
     done
  done
)
BASH VERSION = 4.4.19(1)-release
--------------------------------
alpha = 1
alpha = 2
alpha = 3
beta = 1
beta = 2
beta = 3
gamma = 1
gamma = 2
gamma = 3

#################################################################
BASH VERSION = 4.2.46(2)-release
--------------------------------
alpha = 1 alpha 2 alpha 3 beta 1 beta 2 beta 3 gamma 1 gamma 2 gamma 3

Еще Bash имеет плохую производительность и не может полноценно выполнять арифметические операции, но учитывая специфику задач, которые он решает, это не так уж и важно. Если вам нужны более производительные сценарии, которые требуют также обработки сложных структур данных, следует отдавать предпочтение более продвинутым скриптовым языкам, например Perl.

Версия Bash

Материал этой книги написан в основном относительно Bash 4. Использовать командную оболочку меньшей версии крайне не рекомендуется из-за проблем в безопасности старых версий.

На момент написания книги автор использовал версию 4.4.19(1)-release.

Как читать эту книгу

Книгу можно начать читать с любой главы, так как каждая из них рассматривает тему обособленно. Тем не менее, порядок глав выстроен в логическом порядке (от частных вещей к более общим).

См. также

Ссылки