Искусство программирования на языке сценариев командной оболочки



Программирование на языке сценариев командной оболочки - стр. 263


запускаются, но работают не так как ожидалось (логические ошибки).

запускаются, делают то, что требуется, но имеют побочные эффекты (логическая бомба).

Инструменты, которые могут помочь при отладке неработающих сценариев

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

команда-фильтр tee, которая поможет проверить процессы и потоки данных в критических местах.

ключи -n -v -x

sh -n scriptname

-- проверит наличие синтаксических ошибок, не запуская сам сценарий. Того же эффекта можно добиться, вставив в сценарий команду set -n или set -o noexec. Обратите внимание, некоторые из синтаксических ошибок не могут быть выявлены таким способом.

sh -v scriptname

-- выводит каждую команду прежде, чем она будет выполнена. Того же эффекта можно добиться, вставив в сценарий команду set -v или set -o verbose.

Ключи -n и -v могут употребляться совместно: sh -nv scriptname.

sh -x scriptname

-- выводит, в краткой форме, результат исполнения каждой команды. Того же эффекта можно добиться, вставив в сценарий команду set -x или set -o xtrace.

Вставив в сценарий set -u или set -o nounset, вы будете получать сообщение об ошибке unbound variable всякий раз, когда будет производиться попытка обращения к необъявленной переменной.

Функция "assert", предназначенная для проверки переменных или условий, в критических точках сценария. (Эта идея заимствована из языка программирования C.)

Пример 29-4. Проверка условия с помощью функции "assert"

#!/bin/bash # assert.sh

assert () # Если условие ложно, { #+ выход из сценария с сообщением об ошибке. E_PARAM_ERR=98 E_ASSERT_FAILED=99

if [ -z "$2" ] # Недостаточное количество входных параметров. then return $E_PARAM_ERR fi

lineno=$2

if [ ! $1 ] then echo "Утверждение ложно: \"$1\"" echo "Файл: \"$0\", строка: $lineno" exit $E_ASSERT_FAILED # else # return # и продолжить исполнение сценария.


Содержание  Назад  Вперед