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

How Debug Bash Script




В любой программе не должно быть ошибок, прежде чем она попадет к потребителю. Разработчики программного обеспечения делают все возможное, чтобы в программах не было ошибок. Но сложно сделать код безупречным, когда есть тысячи строк. Отладка - это непрерывный процесс; он помогает немедленно обнаруживать ошибки, собирать ценную информацию о коде и устранять избыточные фрагменты кода.

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







Что такое оболочка в Linux?

Когда вы загружаете компьютер, ядро ​​получает информацию о подключенном оборудовании и позволяет другим подключенным компонентам взаимодействовать. Кроме того, он управляет памятью, процессором и распознает любое новое периферийное устройство. В общем, ядро ​​- это основа любой операционной системы. Но задумывались ли вы когда-нибудь о прямом взаимодействии с ядром, отдавая ему команду для выполнения определенной задачи? Возможно ли это вообще? Абсолютно! С помощью оболочки, компьютерной программы с интерактивным интерфейсом, любой может управлять ядром. Оболочка позволяет людям взаимодействовать с ядром и инструктировать его выполнять любую задачу.



В Unix есть две основные оболочки Оболочка Борна а также Оболочка C . У обоих этих типов есть свои подкатегории. Различные типы снарядов Борна бывают Оболочка Корн (кш), оболочка Альмквиста (ясень), оболочка снова Борна (баш), а также Оболочка Z (zsh) . В то же время в оболочке C есть свои подкатегории вроде Оболочка C (csh) а также Оболочка TENEX C (tcsh) . Как уже упоминалось выше, из всех снарядов, Баш (снова Борн оболочка) - это наиболее широко используемая оболочка, которая входит в стандартную комплектацию многих дистрибутивов Linux благодаря своей эффективности и удобству для пользователя.



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





Что такое сценарий оболочки:

Поскольку мы изучили основную идею оболочки, теперь давайте перейдем к написанию сценариев оболочки. Сценарий оболочки - это компьютерная программа, которая выполняет несколько команд в оболочке, которая действует как интерпретатор для выполнения определенной функции. Как уже говорилось выше, существует 2 конкретных типа оболочек. Однако в этом руководстве основное внимание уделяется оболочке Bourne Again (Bash).
Так что же такое сценарий bash? В Linux все команды bash хранятся в / usr / bin и / bin папки. Например, всякий раз, когда вы запускаете команду, bash ищет, существует ли она в каталоге или нет. Команда запускается, если она находит в каталогах, иначе выдает ошибку.

Как насчет выполнения задачи, требующей выполнения нескольких команд в терминале? В этой конкретной ситуации вам могут помочь сценарии bash. Сценарии Bash - это форма сценариев оболочки, которая позволяет вам заставлять программы запускать несколько команд bash для выполнения определенной задачи.



Какие ошибки в сценариях bash:

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

У каждого языка программирования есть своя процедура поиска ошибок; аналогично bash также имеет множество встроенных опций для отладки терминальной программы.

Управление ошибками и отладка программы - не меньше хлопот. Это трудоемкая работа, которая может ухудшиться, если вы не знаете, какие инструменты подходят для отладки вашей программы. Эта статья представляет собой полное руководство по отладке сценариев bash, чтобы сделать ваш сценарий безошибочным. Итак, приступим:

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

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

В Linux есть различные инструменты для отладки кодов, например GNU Debugger aka gdb. Такие инструменты, как GDB, полезны для языков программирования, которые компилируются в двоичные файлы. Поскольку bash - это простой интерпретируемый язык, нет необходимости в тяжелых инструментах для его отладки.

Существуют различные традиционные методы отладки кода сценария bash, и один из них - добавление Утверждения. Утверждения - это условия, которые добавляются в программы для проверки определенных условий и соответствующего выполнения программы. Это защитный метод, который также помогает находить ошибки и тестировать. Вы можете найти много инструменты которые помогают добавлять утверждения в сценарии bash.

Что ж, добавление утверждений - один из старых традиционных приемов. В bash доступны наборы флагов / параметров для отладки сценария bash. Эти параметры могут быть добавлены вместе с shebang в сценарии или добавлены во время выполнения программы в терминале. Темы, которые мы собираемся обсудить, перечислены ниже:

  1. Как отлаживать скрипт bash, включив подробный -v вариант
  2. Как отлаживать скрипт bash с помощью xtrace -x вариант
  3. Как отлаживать скрипт bash с помощью noexec -n вариант
  4. Как определить неустановленные переменные при отладке сценария bash
  5. Как отлаживать конкретная часть сценария bash
  6. Как отлаживать сценарий bash с помощью ловушка команда
  7. Как отладить сценарий bash, исключив подстановка файлов с помощью -f вариант
  8. Как комбинировать параметры отладки для отладки сценария оболочки
  9. Как перенаправить отладочный отчет в файл

Итак, давайте проверим различные методы в bash для отладки сценария bash:

1. Как отладить сценарий bash, включив подробный параметр -v:

Один из самых простых подходов к отладке сценария bash - использовать -v вариант, также известный как подробный. Опция может быть добавлена ​​с помощью shebang или явно указана с именем файла сценария при его выполнении. Опция подробного выполнения будет выполнять и печатать каждую строку кода как процесс интерпретатора. Давайте разберемся с этим на примере сценария bash:

#! / bin / bash
выбросил 'Введите число1'
читатьномер 1
выбросил 'Введите число2'
читатьномер 2
если [ '$ number1' -gt '$ number2' ]
тогда
выбросил 'Число1 больше числа2'
Элиф [ '$ number1' -экв '$ number2' ]
тогда
выбросил 'Number1 равно Number2'
еще
выбросил 'Число2 больше, чем Число1'
быть

Приведенный выше код получает от пользователя два числа, а затем выполняет несколько условных операторов, чтобы проверить, является ли число более значимым, меньшим или равным другому введенному числу. Хотя для написания сценариев bash можно использовать любой текстовый редактор, я использую редактор Vim. Vim - это мощный, многофункциональный редактор, который подчеркивает синтаксис сценариев bash и снижает вероятность синтаксических ошибок. Если у вас нет редактора Vim, получите его, выполнив команду, указанную ниже:

$судоподходящийустановить я пришел

Создайте файл сценария bash, используя:

$я пришелb_script.sh

Если вы новичок в редакторе Vim, я рекомендую вам изучить как использовать редактор vim прежде чем продолжить.

Теперь вернемся к сценарию, выполните сценарий, используя -v вариант:

$трепать -vb_script.sh

Из вышеприведенного вывода видно, что каждая строка скрипта печатается в терминале по мере их обработки интерпретатором. Обратите внимание, что сценарий перестанет принимать ввод от пользователя, а затем обработает следующую строку сценария. Как обсуждалось выше, -v опцию можно разместить после shebang, как показано ниже:

#! /bin/bash -v

Аналогичным образом, подробный флаг также может быть добавлен в следующую строку shebang, используя установленный команда:

#! / bin / bash
установленный -v

Любой из описанных выше методов может включить подробный.

2 Как отлаживать сценарий bash с помощью параметра xtrace -x:

Трассировка выполнения, также известная как xtrace, - это умный и полезный вариант отладки, особенно для отслеживания логических ошибок. Логические ошибки обычно связаны с переменными и командами. Чтобы проверить состояние переменной во время выполнения скрипта, мы используем -Икс вариант. Теперь снова запустите b_script.sh файл с -Икс флаг:

$трепать -Иксb_script.sh

Выходные данные явно показывают значение каждой переменной во время процесса выполнения. Опять же, -Икс может использоваться рядом с shebang и после строки shebang с помощью команды set. Xtrace помещает знак + в каждую строку скрипта.

3 Как отлаживать сценарий bash с помощью параметра noexec -n:

Синтаксические ошибки - одна из основных причин ошибок. Для синтаксической отладки сценария bash мы используем noexec (без исполнения) режим. Параметр, используемый для режима noexec: -n. Он будет отображать только синтаксические ошибки кода, а не выполнять его. Гораздо более безопасный подход к отладке кода. Выполним b_script.sh снова с -n вариант:

$трепать -nb_script.sh

Если нет синтаксической ошибки, выполнение кода не будет. Теперь давайте изменим наш код:

#! / bin / bash

выбросил 'Введите число1'
читатьномер 1
выбросил 'Введите число2'
читатьномер 2
если [ '$ number1' -gt '$ number2' ]
тогда
выбросил 'Число1 больше числа2'
Элиф [ '$ number1' -экв '$ number2' ]
#тогда
выбросил 'Number1 равно Number2'
еще
выбросил 'Число2 больше, чем Число1'
быть

Я комментирую тогда после Элиф . Теперь с -n выполнить b_script.sh сценарий:

$трепать -nb_script.sh

Как и ожидалось, он четко определил ошибку и отобразил ее в терминале.

4 Как определить неустановленные переменные при отладке сценария bash:

Опечатка при написании кода - обычное дело. Часто вы ошибочно вводите переменную, что не позволяет выполнить код. Для выявления такой ошибки мы используем -u вариант. Давайте еще раз изменим код:

#! / bin / bash
выбросил 'Введите число1'
читатьномер 1
выбросил 'Введите число2'
читатьномер 2
если [ '$ num1' -gt '$ number2' ]
тогда
выбросил 'Число1 больше числа2'
Элиф [ '$ number1' -экв '$ number2' ]
тогда
выбросил 'Number1 равно Number2'
еще
выбросил 'Число2 больше, чем Число1'
быть

Во-первых если условное выражение, я переименовал номер 1 переменная для число1 . Теперь число1 - неустановленная переменная. Теперь запустим скрипт:

$трепать -ub_script.sh

Выходные данные идентифицировали и явно отображают имя неустановленной переменной.

5. Как отлаживать конкретную часть сценария bash:

Режим xtrace обрабатывает каждую строку кода и выдает результат. Однако поиск ошибок в большом коде потребует много времени, если мы уже знаем, какая часть потенциально вызывает ошибку. К счастью, xtrace также позволяет вам отлаживать определенную часть кода, что может быть выполнено с помощью установленный команда. Место установить -x в начале части, которую необходимо отладить, а затем установить + x в конце. Например, я хочу отладить условные операторы b_script.sh , поэтому я заключу все условные выражения в установить -x а также установить + x параметры, как показано в приведенном ниже коде:

#! / bin / bash
выбросил 'Введите число1'
читатьномер 1
выбросил 'Введите число2'
читатьномер 2
установленный -Икс
если [ 'число $' -gt '$ number2' ]
тогда
выбросил 'Число1 больше числа2'
Элиф [ '$ number1' -экв '$ number2' ]
тогда
выбросил 'Number1 равно Number2'
еще
выбросил 'Число2 больше, чем Число1'
быть
установленный+ х

Теперь запустите скрипт, используя bash b_script.sh .

Выходные данные - это только отладка условий if, как указано.

6. Как отлаживать сценарий bash с помощью команды trap:

Если ваш сценарий сложный, то есть и более сложные методы отладки. Один из них - ловушка команда. В ловушка команда улавливает сигналы и выполняет команду при возникновении конкретной ситуации. Команда может быть сигналом или функцией. Я создал еще один скрипт под названием sum_script.sh :

#! / bin / bash
ловушка 'echo' Строка $ {LINENO}: первое число - $ number1, второе число - $ number2, а сумма - $ sum ''ОТЛАЖИВАТЬ
выбросил 'Введите первый номер'
читатьномер 1
выбросил 'Введите второй номер'
читатьномер 2
сумма= $[число1 + число2]
выбросил 'сумма$ сумма'

В ловушка команда с ОТЛАЖИВАТЬ сигнал отображает состояние переменных номер 1 , номер 2 а также сумма после выполнения каждой строки, как показано на следующем выходном изображении:

Желтые блоки - это пустые места, потому что пользователь еще не ввел никаких данных; эти пробелы будут заполняться по мере ввода пользователем значений. Этот метод также очень полезен при отладке сценариев bash.

7. Как отлаживать сценарий bash, исключив подстановку файлов с помощью параметра -f:

Подстановка файлов - это процесс поиска файлов с подстановочными знаками, т. Е. * а также ? . Во многих случаях вам не нужно расширять файлы во время отладки. В таких случаях вы можете заблокировать подстановку файлов с помощью -f вариант. Давайте разберемся со сценарием fglobe_script.sh :

#! / bin / bash
выбросил «Показать все текстовые файлы».
ls *.текст

Приведенный выше код отобразит все текстовые файлы в текущем каталоге, выполните:

$трепатьfglobe_script.sh

Чтобы отключить подстановку файлов, используйте -f вариант:

$трепать -ffglobe_script.sh

Точно так же вы можете использовать его с шебангом и с установленный также команда:

#! / bin / bash
выбросил «Показать все текстовые файлы».
ls *.текст
установленный -f
выбросил 'Показать все текстовые файлы'
ls *.текст
установленный+ f

Теперь беги bash fglobe_script.sh:

Часть, содержащая набор -f / набор + f options не обрабатывали команды с подстановочными знаками.

8. Как объединить параметры отладки для отладки сценария оболочки:

Мы используем только один вариант в вышеупомянутых методах отладки, но мы можем комбинировать различные варианты для лучшего понимания. Давайте реализуем -Икс а также -v варианты sum_script.sh сценарий. Я использую sum_script.sh сценарий.

#! / bin / bash
выбросил 'Введите первый номер'
читатьномер 1
выбросил 'Введите второй номер'
читатьномер 2
сумма= $[число1 + число2]
выбросил 'сумма$ сумма'

Теперь выполните:

$трепать -xvsum_script.sh

Оба -Икс а также -v выходы объединяются, как показано в выходном изображении. Точно так же мы можем комбинировать -u опция с подробным -v для обнаружения ошибок. Я заменяю номер 1 переменная с на одной в шестой строке скрипта:

#! / bin / bash
является$ number2а такжесуммаявляется$ сумма'ОТЛАДКА
выбросил '
Введите первое число'
читать число1
выбросил '
Введите второй номер'
читать число2
сумма = $ [число + число2]
выбросил '
тосуммаявляется$ сумма'

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

$трепать -uvsum_script.sh

9. Как перенаправить отладочный отчет в файл:

Сохранение отчета об отладке сценария bash в файл может быть полезно во многих ситуациях. Это немного сложно, потому что перенаправить отчет об отладке в файл; мы используем некоторые специальные переменные. Давайте реализуем это на b_script.sh код:

#! / bin / bash
exec 5>dubug_report.log
BASH_XTRACEDзнак равно'5'
PS4знак равно'$ LINENO--'
выбросил 'Введите число1'
читатьномер 1
выбросил 'Введите число2'
читатьномер 2
если [ 'число $' -gt '$ number2' ]
тогда
выбросил 'Число1 больше числа2'
Элиф [ '$ number1' -экв '$ number2' ]
тогда
выбросил 'Number1 равно Number2'
еще
выбросил 'Число2 больше, чем Число1'
быть

Во второй строке кода видно, что мы перенаправляем вывод на debug_report.log файл с помощью exec команда с файловым дескриптором 5 (FD5).

exec 5> debug_report.log: В exec команда перенаправляет все, что происходит в оболочке, в файл debug_report.log.

BASH_XTRACEFD = 5: Это конкретная переменная bash и не может использоваться в любой другой оболочке. Ему должен быть назначен действительный дескриптор файла, и bash запишет извлеченный вывод в debug_report.log.

PS4 = ’$ LINENO– ‘: Это также переменная bash, используемая для вывода номера строки при отладке в режиме xtrace. Значение по умолчанию для PS4: + подписать

Приведенный выше сценарий создает файл журнала с именем debug_report.log, чтобы прочитать это, используйте Кот команда:

Заключение:

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

Многие языки программирования и среды имеют свои собственные отладчики-компаньоны. В сценариях bash могут быть реализованы различные методы отладки сценария. В этом руководстве подробно рассматриваются все методы, которые можно использовать для поиска ошибок в сценариях bash. Поэтому всякий раз, когда вы чувствуете, что ваш сценарий bash работает не так, как ожидалось, используйте любой из методов, упомянутых выше, но в большинстве случаев очень полезен режим xtrace (-x).