Как отлажидить / проверить скрипты Bash

Thank you for reading this post, don't forget to subscribe! 
Есть мето­ды из тра­ди­ци­он­ных сред про­грам­ми­ро­ва­ния, кото­рые могут помочь.
Неко­то­рые основ­ные инстру­мен­ты, такие как исполь­зо­ва­ние редак­то­ра с под­свет­кой син­так­си­са, так­же помогут.
Есть встро­ен­ные опции, кото­рые Bash сам по себе предо­став­ля­ет, что­бы упро­стить отлад­ку и еже­днев­ную рабо­ту систем­но­го адми­ни­стра­то­ра Linux.
В этой ста­тье вы узна­е­те несколь­ко полез­ных мето­дов отлад­ки скрип­тов Bash:
  • Как исполь­зо­вать тра­ди­ци­он­ные методы
  • Как исполь­зо­вать пара­метр xtrace
  • Как исполь­зо­вать дру­гие пара­мет­ры Bash
  • Как исполь­зо­вать trap

Используя Традиционные Методы

Отлад­ка кода может быть слож­ной, даже если ошиб­ки про­сты и очевидны.

Для помо­щи про­грам­ми­стам тра­ди­ци­он­но исполь­зо­ва­лись такие инстру­мен­ты, как отлад­чи­ки и под­свет­ка син­так­си­са в редакторах.

Ниче­го не меня­ет­ся при напи­са­нии скрип­тов Bash.

Про­стое выде­ле­ние син­так­си­са поз­во­лит вам отлав­ли­вать ошиб­ки при напи­са­нии кода, избав­ляя вас от тру­до­ем­кой зада­чи отсле­жи­ва­ния оши­бок на более позд­нем этапе.

Неко­то­рые язы­ки про­грам­ми­ро­ва­ния постав­ля­ют­ся с сопут­ству­ю­щи­ми сре­да­ми отлад­ки, таки­ми как gcc и gdb, кото­рые поз­во­ля­ют вам шагать по коду, уста­нав­ли­вать точ­ки оста­но­ва, иссле­до­вать состо­я­ние все­го в момен­ты выпол­не­ния и мно­гое дру­гое — но, как пра­ви­ло, тут не тре­бу­ет­ся такой слож­ный под­ход, как этот с скрипт обо­лоч­ки и код про­сто интер­пре­ти­ру­ет­ся, а не ком­пи­ли­ру­ет­ся в дво­ич­ные файлы.

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

В основ­ном это спо­со­бы явно­го утвер­жде­ния усло­вий или состо­я­ния вещей в опре­де­лен­ный момент времени.

Утвер­жде­ния могут выявить даже самые незна­чи­тель­ные ошибки.

Они могут быть реа­ли­зо­ва­ны в виде корот­кой функ­ции, кото­рая пока­зы­ва­ет вре­мя, номер стро­ки и тому подоб­ное, или что-то вро­де этого:

Как использовать опцию Bash xtrace

При напи­са­нии скрип­тов обо­лоч­ки логи­ка про­грам­ми­ро­ва­ния име­ет тен­ден­цию быть коро­че и часто содер­жит­ся в одном файле.

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

Пер­вый вари­ант, кото­рый сто­ит упо­мя­нуть, веро­ят­но, самый полез­ный — пара­метр xtrace.

Его мож­но при­ме­нить к скрип­ту, вызвав Bash с клю­чом -x.

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

Как использовать другие параметры Bash

Пара­мет­ры отлад­ки Bash по умол­ча­нию отклю­че­ны, но как толь­ко они вклю­ча­ют­ся с помо­щью коман­ды set, они оста­ют­ся вклю­чен­ны­ми до тех пор, пока не будут явно отключены.

Если вы не уве­ре­ны, какие опции вклю­че­ны, вы може­те про­ве­рить пере­мен­ную $ -, что­бы уви­деть теку­щее состо­я­ние всех переменных.

Есть еще один полез­ный ключ, кото­рый мы можем исполь­зо­вать, что­бы помочь нам най­ти пере­мен­ные, на кото­рые что-то ссы­ла­ет­ся, без уста­нов­ки како­го-либо значения.
Это ключ -u, и точ­но так же, как -x и -v, его так­же мож­но исполь­зо­вать в команд­ной строке.
Мы можем исполь­зо­вать эти опции в корот­ких скрип­тах Bash, что­бы предо­ста­вить нам инфор­ма­цию отлад­ки для выяв­ле­ния про­блем, кото­рые ина­че не вызо­вут обрат­ную связь от интер­пре­та­то­ра Bash.

Как использовать trap, чтобы помочь в отладке

Есть более слож­ные мето­ды, кото­рые сто­ит рас­смот­реть, если ваши скрип­ты боль­ши­ие слож­ные, вклю­чая исполь­зо­ва­ние функ­ции assert, как упо­ми­на­лось ранее.

Один из таких мето­дов, о кото­рых сле­ду­ет пом­нить, — это исполь­зо­ва­ние trap bash поз­во­ля­ют нам пере­хва­ты­вать сиг­на­лы и что-то делать в этой точке.

Про­стой, но полез­ный при­мер, кото­рый вы може­те исполь­зо­вать в сво­их скрип­тах Bash — это trap EXIT.

Заключение

Если вы заме­ти­ли, что ваш скрипт Bash ведет себя не так, как ожи­да­лось, и при­чи­на по какой-либо при­чине вам не ясна, поду­май­те, какая инфор­ма­ция будет полез­на, что­бы помочь вам опре­де­лить при­чи­ну, а затем исполь­зуй­те наи­бо­лее удоб­ные инстру­мен­ты, доступ­ные для опре­де­ле­ния проблем.
Опция xtrace -x про­ста в исполь­зо­ва­нии и, веро­ят­но, явля­ет­ся наи­бо­лее полез­ной из пред­став­лен­ных здесь опций, поэто­му попро­буй­те попро­бо­вать ее в сле­ду­ю­щий раз, когда вы столк­не­тесь со скрип­том, кото­рый не выпол­ня­ет то, что, по ваше­му мне­нию долж­но произойти.