Создадим сценарий, вызывающий функции из файла functions.sh. Затем эти функции могут использоваться для выполнения каких‑либо задач. Обратите внимание, что файл функций загружается с помощью следующего формата команд:
. /<путь к файлу>
При использовании этого метода не создается порожденный интерпретатор shell; все функции остаются в текущем интерпретаторе shell.
$ pg dlrec_check
#!/bin/sh
# direc_check
# загрузка файла функций functions.sh # ниже точка, пробел и косая черта. /home/dave/bin/functions.sh
# теперь могут использоваться функции
echo -n "enter destination directory :"
read DIREC
if is_it_a_directory $DIREC
then : .
else
error_msg "$DIREC does not exist… creating it now"
mkdir $DIREC > /dev/null 2>$1
if [ $? ! — 0 ]
then
error_msg "Could not create directory: check it out!"
exit 1
else :
fi
fi # не является каталогом
echo "extracting files…"
При выполнении сценария получается тот же вывод, что и при встраивании функции в сценарий:
S direc_check
enter destination directory :AUDIT
AUDIT does not exist… creating it now
extracting files…
19.12. Загрузка файлов, которые состоят не только из функций
Загружаемый файл не обязательно должен содержать только функции; он может включать глобальные переменные, образующие файл конфигурации.
Предположим, что существует пара сценариев резервирования, которые архивируют различные части системы. Неплохой идеей в этом случае является разделение единого файла конфигурации. Все, что нужно для этого, -cоздать переменные внутри файла. Затем, когда начинает выполняться один из сценариев резервирования, можно загрузить эти переменные, если потребуется изменить любые настройки, заданные по умолчанию, перед началом выполнения сценария резервирования. Это может быть связано с тем, что пользователь захочет выполнять архивирование на различных носителях.
Подобный подход может применяться сценариями, разделяющими общие параметры конфигурации, с целью выполнения процесса. Ниже приведен пример. В следующем файле конфигурации содержатся переменные среды, заданные по умолчанию. Эти переменные используются несколькими сценариями резервирования. Вот содержимое этого файла:
$ pg backfunc
#!/bin/sh
• name: backfunc
• конфигурационный файл содержит настройки по умолчанию для систем архивации _CODE="comet"
_FULLBACKUP="yes" _LOGF1LE="/logs/backup/" _DEVICE="/dev/rmt/0n" _INFORM="yes" _PRINT_STATS="yes"
Комментарии разъясняют суть программы. Первое поле, _code, содержит кодовое слово. Для просмотра его содержимого и изменения значений пользователь должен ввести код, соответствующий значению code. В данном случае указывается слово "comet".
Ниже приведен сценарий, который в ответ на ввод пароля отображает конфигурацию, заданную по умолчанию:
$ pg readfunc
#!/bin/sh
# readfunc
if [ -r backfunc ]; then
# указание файла с параметрами
. /backfunc else
echo "`basename $0` cannot locate backfunc file" fi
echo -n "Enter the code name :"
# соответствует ли указанный код коду из файла backfunc?
if [ "${CODE}" != "${_CODE}" ]; then
echo "Wrong code…exiting..will use defaults" exit 1 fi
echo ." The environment config file reports"
echo "Full Backup Required : $_FULLBACKUP"
echo "The Logfile is : $_LOGFILE"
echo "The Device To Backup To is : $_DEVICE" echo "You Are To Be Informed by Mail : $_INFORM" echo "A Statistic Report To Be Printed: $_PRINT_STATS"