Как отлаживать сценарий bash?
Сценарий — это просто файл, содержащий набор команд. Основная идея сценария состоит в том, чтобы автоматически выполнять и повторно выполнять серию команд вместо того, чтобы вручную вводить их одну за другой. Для сценария все, что вам нужно, это создать простой текстовый файл и ввести список команд для выполнения конкретной задачи, а затем сохранить файл. Теперь, когда вам нужно выполнить эту конкретную задачу, просто запустите файл сценария, и работа будет выполнена автоматически.
Это базовое представление о том, что такое сценарий bash. Теперь поговорим об отладке скрипта. Когда мы пишем небольшой сценарий с несколькими командами, их отладка — это просто просмотр вывода и проверка того, что они работают должным образом. Однако для более крупных сценариев, таких как сценарии, написанные для веб-страниц, конфигурации системы и т. д., глядя только на вывод
недостаточно, чтобы найти проблемы. Вот где нам нужен инструмент отладки. При работе с языками программирования есть интегрированный с ними инструмент отладки. Однако в сценариях bash у нас нет такого инструмента, но мы можем использовать командную строку для выполнения отладки.
В этой статье мы узнаем, как отлаживать сценарий bash в ОС Debian.
Ниже приведены некоторые доступные параметры отладки в командной строке:
- параметр -x* — отображает следы команд до их выполнения
- параметр -n — не отображает команду, просто проверяет синтаксические ошибки
- параметр -v — отображает команды во время их чтения
Мы используем ОС 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* позволяет выбрать отладку части сценария или всего сценария.
Редактор: AndreyEx