Как отлаживать скрипты на bash

()

Один из самых частов вопросов как среди администраторов, так и среди пользователей UNIX - как отлаживать скрипты на bash?

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

Метод #1 - использование опции -x

Просто запустите скрипт с опцией -x. Например:

$ bash -x script-name
$ bash -x domains.sh

Метод #2 - использование встроенного набора команд

Вы можете включать и выключать режим отладки используя следующие команды внутри скрипта:

set -x - Показывать командны и параметры, которые выполняются.

set -v - Показывать строки по мере их чтения.

Вы можете использовать их следующим образом:

#!/bin/bash
clear
# включаем режим отладки
set -x
for f in *
do
   file $f
done
# выключаем режим отладки
set +x
ls
# прочие команды

Так же для отладки вы можете заменить первую строчку скрипта на #!/bin/bash -xv.

Метод #3 - Написать отладочную функцию DEBUG

Добавьте переменную _DEBUG и присвойте ей значение on:

_DEBUG="on"

Затем добавьте следующую функцию в ваш скрипт:

function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}

Далее во всех местах где нужна отладка используйте примерно вот такой код:

DEBUG echo "File is $filename"

Или даже вот такой:

DEBUG set -x

... отлаживаемая часть скрипта

DEBUG set +x

Когда отладка скрипта будет закончена можно просто присвоить переменной _DEBUG значение off.

Рассмотрим вот такой скрипт:

#!/bin/bash
_DEBUG="on"
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@ || :
}

DEBUG echo 'Reading files'
for i in *
do
grep 'something' $i > /dev/null
[ $? -eq 0 ] && echo "Found in $i file" || :
done
DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x
echo "$a + $b = $c"

Сохраним скрипт, выполним и посмотрим на результат выполнения:

Reading files
Found in xyz.txt file
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5

Теперь установим значение переменной _DEBUG в off и попробуем ещё раз выполнить скрипт. В результате мы увидим следующее:

Found in xyz.txt file
2 + 3 = 5

То что вы видели - пример простой и эффективной отладки скрипта.

Источник

Ключевые слова: bash, debug.

Комментарии:

Anonymous 2011-10-25 00:08:20 (#)

Позновательно

Anonymous 2012-02-04 14:49:22 (#)

скрипты автозагрузки отлаживаются так же?

Anonymous 2012-04-22 15:23:23 (#)

интересно
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE