отладка(debug) сценария bash

Thank you for reading this post, don't forget to subscribe!

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

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

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

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

 

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

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

 

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

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

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

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

 

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

 

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

 

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

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

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

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

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

 

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

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

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

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

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

 

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

 

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

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

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

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

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

 

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

 

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

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