Логотип

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

Bash Heredoc

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

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

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

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

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

  • параметр -x* — отображает следы команд до их выполнения
  • параметр -n — не отображает команду, просто проверяет синтаксические ошибки
  • параметр -v — отображает команды во время их чтения

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

 

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

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

Читать  10 крутых и потрясающих примеров циклов Bash

 

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

Запуск оболочки с параметром –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 или без выполнения) включает режим проверки синтаксиса. Он указывает оболочке не выполнять команды, а просто проверять синтаксические ошибки. Это безопасный способ выполнить отладку, поскольку он не выполняет команды, если они содержат какую-либо ошибку.

Читать  Выпущено ядро Linux 6.18. Что в нём нового

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

$ 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

Рейтинг: 4.5 (41 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

три × четыре =

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала