ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Как отлаживать сценарий bash?

Bash Heredoc

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

Это базовое представление о том, что такое сценарий bash. Теперь поговорим об отладке скрипта. Когда мы пишем небольшой сценарий с несколькими командами, их отладка – это просто просмотр вывода и проверка того, что они работают должным образом. Однако для более крупных сценариев, таких как сценарии, написанные для веб-страниц, конфигурации системы и т. д., глядя только на вывод

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

В этой статье мы узнаем, как отлаживать сценарий bash в ОС Debian.

Ниже приведены некоторые доступные параметры отладки в командной строке:

Мы используем ОС Debian 10 для объяснения процедуры, обсуждаемой в этой статье.

 

Отслеживание выполнения (опция -x)

Он указывает оболочке отображать, как каждая команда выглядит перед выполнением. Кроме того, он дает вам выбор, отлаживать ли сценарий целиком или только его часть.

 

Отладка всего сценария

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

Это наш пример сценария с именем «myscript.sh»:

#!/bin/bash
exec 5> debug_output.txt
BASH_XTRACEFD="5"
PS4='$LINENO: '
var="Привет мир!"
# печать
echo "$var"
# альтернативный способ печати
printf "%s\n" "$var"
echo "Мой дом - это: $HOME"

 

Чтобы запустить весь сценарий в режиме отладки, добавьте параметр -x перед запускающим скриптом следующим образом:

$ bash -x ./script_name.sh

 

В нашем примере это будет:

$ bash -x ./myscript.sh

 

Ниже наш «myscript.sh» работает в режиме отладки. Добавленные комментарии не печатаются в отлаженном выводе.

 

Отладка части скрипта

Если мы уверены, что только часть скрипта вызывает ошибки, тогда нет необходимости отлаживать весь скрипт. Мы можем отладить часть или несколько частей скрипта следующим образом:

Поместите опцию «set –x» в начальную точку области, в которой требуется отладка, и поместите опцию «set + x» там, где вы хотите, чтобы она остановилась. Например, в следующем скрипте мы хотим отладить область, начиная с $var, потому что мы думаем, что она работает не так, как ожидалось. Поэтому мы заключим его, поместив опцию set –x перед строкой $var, и закончим, поместив опцию set + x во вторую последнюю строку.

Отредактируйте файл сценария с помощью любого редактора. Для этого мы используем редактор nano:

$ sudo nano myscript.sh

Теперь заключите область, которую вы хотите отладить, используя параметр set –x и set + x, как описано выше.

#!/bin/bash
exec 5> debug_output.txt
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
var="Привет мир"
# печать
echo "$var"
# альтернативный способ печати
printf "%s\n" "$var"
set +x
echo "Мой дом - это: $HOME"

 

После этого используйте Ctrl + O для сохранения, а затем Ctrl + X для выхода из файла.

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

$ ./myscript.sh

Отключение оболочки (параметр -n)

Параметр -n (сокращение от noexec или без выполнения) включает режим проверки синтаксиса. Он указывает оболочке не выполнять команды, а просто проверять синтаксические ошибки. Это безопасный способ выполнить отладку, поскольку он не выполняет команды, если они содержат какую-либо ошибку.

Для запуска этого режима используйте следующий синтаксис:

$ sh –n ./script_name

 

Это наш пример сценария с именем «myscript1.sh»:

#!/bin/bash
var="Привет мир"
echo "$var"
echo "Мой домашний каталог is=$HOME
echo "Мое имя is=$USER"

 

Когда мы запускаем сценарий без какой-либо опции отладки, он показывает следующий результат:

Чтобы отладить сценарий с параметром –n , используйте следующую команду:

$ sh -n ./myscript1.sh

 

Вывод не вывел только синтаксические ошибки.

 

Отображение команд сценария (параметр -v)

-v (сокращение от verbose) указывает оболочке работать в подробном режиме. При использовании этого режима он отображает все команды в сценарии перед их выполнением.

Для запуска этого режима используйте следующий синтаксис:

$ sh –v ./script_name

 

Это наш пример сценария с именем «myscript1.sh:»

#!/bin/bash
var="Привет мир"
echo "$var"
echo "Мой домашний каталог is=$HOME”
echo "Мое имя is=$USER"

 

Это то, что наш скрипт, когда мы выполняем его без какой-либо опции отладки.

Теперь, когда мы выполняем его с параметром –v, он отображает команды до их результатов.

На данный момент это все! Мы видели, как отлаживать сценарий bash, используя три разных параметра командной строки. Среди этих параметров параметр –x позволяет выбрать отладку части сценария или всего сценария.

Exit mobile version