Когда сценарий не работает должным образом, необходимо определить место возникновения проблемы. Оболочки UNIX/Linux предоставляют режим отладки. Запустите весь скрипт в режиме отладки или только часть скрипта.
Чтобы запустить весь скрипт в режиме отладки, добавьте -x после #!/bin/[shell] в первой строке:
1 | #!/bin/sh -x |
Чтобы запустить весь скрипт в режиме отладки из командной строки, добавьте -x к команде sh, используемой для выполнения скрипта:
1 | sh -x [имя_скрипта] |
Параметры оператора отладки
Запустите несколько частей сценария в режиме отладки, поместив опцию set -x в то место, где должна начаться отладка, и опцию set +x в то место, где вы хотите ее остановить. Сделайте это столько раз в сценарии, сколько вам нужно.
Опции отладки показаны в таблице ниже:
Значение | опции |
set -x | Вывод операторов после интерпретации метасимволов и переменных |
set +x | Остановка вывода операторов |
set -v | Вывод операторов до до интерпретации метасимволов и переменных |
set -f | Отключает генерацию имен файлов (с использованием метасимволов) |
Оператор set -v аналогичен оператору set -x, за исключением того, что он показывает строку оператора до того, как оболочка выполнит интерпретацию или подстановку. Когда вы используете эти две опции вместе с set -xv, оболочка отображает строки операторов до и после интерпретации и подстановки, чтобы вы могли видеть, как оболочка использовала строку оператора в сценарии.
Для следующего оператора в сценарии оболочки:
1 | echo $HOME # эхо путь к каталогу HOME |
Строка оператора перед интерпретацией (set -v) имеет вид:
1 | echo $HOME # echo путь к каталогу HOME |
Строка оператора после интерпретации (set-x) имеет вид:
1 | + echo /home/user |
Если обе опции включены, строка -v всегда отображается перед строкой -x. Кроме того, символ + не предшествует строке -v.
Пример режима отладки с опцией set -x
В следующем примере показан режим отладки, включенный для сценария и выключенный в конце.
1 2 3 4 | #!/bin/sh set -x echo "Ваш домашний каталог : $HOME" set +x |
Пример режима отладки с опцией set -v
В следующем примере показан режим отладки -v, включенный для сценария. Эта опция:
- Выводит оператор перед выполнением, но без ведущего + (в отличие от того, что отображает опция -x).
- Не переводит метасимволы; поэтому выводит оператор точно так, как оно есть в сценарии.
- Выводит строки комментариев.
1 2 3 4 | #!/bin/sh set -v echo "Ваш домашний каталог : $HOME" set +v |