Листинг 1.28. Подключение единой библиотеки с прежде реализованными функциями и их вызов
··#!/bin/bash
··# Сценарий тестирования библиотеки
··# Сначала подключить (прочитать) файл library.sh.
··. library.sh
··initializeANSI # Настроить управляющие ANSI-последовательности.
··# Проверить функцию validint.
··echon "First off, do you have echo in your path? (1=yes, 2=no) "
··read answer
··while! validint $answer 1 2; do
····echon "${boldon}Try again${boldoff}. Do you have echo "
····echon "in your path? (1=yes, 2=no) "
····read answer
··done
··# Проверить работу функции поиска команды в списке путей.
··if! checkForCmdInPath "echo"; then
····echo "Nope, can't find the echo command."
··else
····echo "The echo command is in the PATH."
··fi
··echo ""
··echon "Enter a year you think might be a leap year: "
··read year
··# Убедиться, что значение года находится в диапазоне между 1 и 9999,
··#·· с помощью validint, передав ей минимальное и максимальное значения.
··while! validint $year 1 9999; do
····echon "Please enter a year in the ${boldon}correct${boldoff} format: "
····read year
··done
··# Проверить, является ли год високосным.
··if isLeapYear $year; then
····echo "${greenf}You're right! $year is a leap year.${reset}"
··else
····echo "${redf}Nope, that's not a leap year.${reset}"
··fi
··exit 0
Как это работает
Обратите внимание, что библиотека и все содержащиеся в ней функции включаются в окружение сценария выполнением единственной строки .
Этот очень удобный прием можно снова и снова использовать со многими сценариями, представленными в книге. Просто поместите подключаемый библиотечный файл в один из каталогов, перечисленных в переменной окружения PATH, чтобы команда. могла найти его.
Запуск сценария
Чтобы запустить тестовый сценарий, вызовите его из командной строки, подобно любому другому сценарию, как показано в листинге 1.29.
Результаты
Листинг 1.29. Запуск сценария library-test
$ library-test
First off, do you have echo in your PATH? (1=yes, 2=no) 1
The echo command is in the PATH.
Enter a year you think might be a leap year: 432423
Your value is too big: largest acceptable value is 9999.
Please enter a year in the correct format: 432
You’re right! 432 is a leap year.
В случае ввода слишком большого значения, сообщение об ошибке будет показано жирным шрифтом. Кроме того, сообщение, подтверждающее правильность выбранного високосного года, отображается зеленым цветом.
Исторически 432 год не считается високосным, потому что учет високосных лет не производился до 1752 года. Но мы говорим о сценариях командной оболочки, а не о хитрости летоисчисления, так что оставим эту неточность без внимания.
№ 13. Отладка сценариев
Этот раздел не содержит настоящего сценария, но мы хотели бы потратить несколько страниц в книге, чтобы поговорить об основах отладки сценариев, потому что рано или поздно вы все равно столкнетесь с ошибками!
По нашему опыту, лучшая стратегия отладки — наращивать возможности сценариев постепенно. Некоторые программисты оптимистично надеются, что все заработает правильно с первого раза, но вы будете по-настоящему уверенно двигаться вперед, если начнете с малого. Кроме того, для трассировки переменных можно свободно использовать команды echo, а также запускать сценарии командой bash −x, чтобы обеспечить вывод отладочной информации, например:
$ bash −x myscript.sh
Как вариант, можно добавить команду set −x перед началом отлаживаемого фрагмента и set +x — после него, как показано ниже:
$ set −x
$./myscript.sh
$ set +x
Чтобы увидеть, как действуют флаги −x и +x, попробуем отладить простую игру «угадай число», представленную в листинге 1.30.
Код
Листинг 1.30. Сценарий hilow, возможно содержащий несколько ошибок, который нужно отладить.
··#!/bin/bash
··# hilow — Простая игра "угадай число"
··biggest=100················# Максимальное возможное число