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

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску
Bash Logo Colored.svgПрактическое написание сценариев командной оболочки Bash

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


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


  1. Команда test
  2. Ветвления
  3. Циклы
  4. Функции
  5. Эмуляция ссылочной адресации
  6. Bash подстановки
  7. Команда read
  8. Код-сниппеты
  9. Приложения

В этом учебнике мы рассмотрим язык сценариев командной оболочки 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.

Как читать эту книгу[править]

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

См. также[править]

Ссылки[править]


Команда test →