Bash HereDoc Учебник с примерами

Here-документ (HereDoc) - это участок кода, который действует как отдельный файл. HereDoc - это многострочная строка или файловый литерал для передачи входных потоков другим командам и программам.

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

Необходимые условия

  • Доступ к командной строке/терминалу в качестве пользователя sudo.
  • Текстовый редактор для написания сценариев Bash.
  • Знание основных команд Linux.

Синтаксис Bash HereDoc

Синтаксис для написания HereDoc следующий:

Состоит из следующих элементов:

  • КОМАНДА- необязательный. Работает для любой команды, которая принимает перенаправление.
  • << - оператор перенаправления для пересылки HereDoc в КОМАНДУ.
  • - это параметр для подавления табуляции.
  • РАЗДЕЛИТЕЛЬ в первой строке определяет маркер разделителя HereDoc. Наиболее распространены END, EOT и EOF, но подойдет любое многосимвольное слово, которое не появится в теле документа. Опустите одинарные кавычки в первой строке, чтобы позволить расширение команд и переменных.
  • РАЗДЕЛИТЕЛЬ в последней строке указывает на конец HereDoc. Используйте то же слово из первой строки без пробелов.

Сам HereDoc содержит любое количество строк со строками, переменными, командами и другими входными данными.

Примеры Bash HereDoc

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

Многострочный ввод

Откройте терминал и введите следующий текст, нажимая Enter после каждой строки:

Многострочный ввод bash

Расширение переменных

HereDoc допускает использование переменных и считывает их.

Чтобы увидеть, как это работает, создайте две переменные в терминале:

Передайте HereDoc команде cat, чтобы вывести эти две переменные вместе с переменной окружения:

переменные heredoc

Все переменные расширяются, и их соответствующие значения выводятся на терминал.

Расширение команд

HereDocs допускает подстановку команд. Запустите следующий код в терминале строка за строкой, чтобы увидеть результаты:

расширение команды cat

Заключите каждую команду в $(), чтобы оценить утверждение и получить результаты. Если опустить $(), текст будет рассматриваться как строка.

Игнорирование расширения переменных и команд

Добавьте одинарные или двойные кавычки к первому разделителю, чтобы игнорировать расширение переменных и команд в HereDoc.

Например:

heredoc кавычки без расширения

Добавление кавычек к разделителю рассматривает содержимое как литерал HereDoc.

Передача и перенаправление

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

В качестве альтернативы используйте нотацию перенаправления для достижения того же результата:

Запустите сценарий Bash, чтобы увидеть результаты.
Передача и перенаправление

В обоих случаях вывод команд cat и HereDoc направляется (или перенаправляется) в команду base64 -d. В результате сценарий декодирует сообщение из HereDoc.

Запись в файл

HereDoc позволяет писать многострочные документы с помощью одной команды.

Чтобы создать файл и сохранить содержимое HereDoc, используйте следующий формат:

Если документ не существует, команда создаст его. Для подтверждения проверьте содержимое файла:

heredoc в файл

В консоли отобразится содержимое файла.

Подавление табуляции

Добавьте тире (-) после перенаправления, чтобы подавить ведущие табуляции. Например, создайте и запустите следующий сценарий:

#!/bin/bash

подавление табуляции heredoc

Без подавления табуляции сообщение выводится на консоль с отступом. Добавление тире убирает отступ табуляции и выводит сообщение без пробелов.

Внутри утверждений и циклов

При работе с HereDoc внутри утверждений и циклов следует помнить о следующем поведении:

Код внутри утверждений и циклов отделяется отступом. Добавьте тире после оператора перенаправления, чтобы печатать сообщения из HereDoc без отступов.
Завершающий разделитель не может иметь пробелов или отступов перед собой.

Попробуйте следующий пример кода, чтобы увидеть, как использовать HereDoc внутри оператора if:

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

Многострочные комментарии

HereDoc с командой null (:) создает эффект блочных комментариев в сценариях Bash.

Например:

Использование нотации HereDoc в качестве блочного комментария является нетрадиционным. В целом, Bash не поддерживает блочное комментирование.

Эскейп-символы

Чтобы избежать интерпретации символов, добавьте обратную косую черту (\) перед символом:

В качестве альтернативы, можно полностью избежать интерпретации символов, экранируя разделитель:

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

Функции

Добавьте параметры в функцию, передав информацию через HereDoc. Например, создайте функцию для чтения строк и добавления информации через HereDoc:

Функция сохраняет информацию, предоставленную HereDoc, в переменных.

HereDoc и SSH

HereDoc удобен для выполнения нескольких команд на удаленной машине. Передайте HereDoc в SSH-соединение для выполнения нескольких команд.

Например:

Команда выводит локального и удаленного пользователей на консоль.

HereDoc и SFTP

SFTP помогает безопасно передавать данные по протоколу SSH. Переадресуйте HereDoc для автоматического выполнения нескольких команд SFTP:

Код загружает файл-образец на удаленную машину.

Заключение

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий