Linux и UNIX: программирование в shell. Руководство разработчика
Шрифт:
tape device [rmt0]
Можно выбрать rmt1 и rmt3
mail admin when the backup has finished [yes]
Нет вариантов выбора
type of backup [full]
Можно выбрать опцию
normal или sybase
Изменения настроек выполняются с помощью временных переменных. Для получения доступа к заданным по умолчанию
backup log filename code name.
Все внесенные изменения затем подтверждаются. После завершения процесса подтверждения значения временных переменных снова присваиваются исходным переменным. До завершения резервного копирования выполняется тестирование магнитной ленты. В процессе резервного копирования применяются команды find и cpio. С помощью этих команд используются переменные из файла настроек или значения новых переменных, указанные пользователем.
Далее приводится соответствующий сценарий.
$ pg backup_run
#!/bin/sh
#backup_run
#сценарий выполнения резервного копирования
#загрузка файла с конфигурационными параметрами
SOURCE=/appdva/bin/backup.defaults
check_source
{
#check_source
#файл backup.defaults содержит параметры конфигурации/функции
#проверка того, что путь содержит нужный каталог
if [ -r $SOURCE ]; then
. $SOURCE
else
echo "`basename $0`: cannot locate defaults file"
exit 1
fi
}
header {
# header
USER=`whoami`
MYDATE=`date + %A" "%e" of "%B-%Y`
clear
cat << MAYDAY
User : $USER $MYDATE
NETWORK SYSTEM BACKUP
MAYDAY
}
change_settings {
# change_settings
# отображение параметров, заданных по умолчанию
header
echo "Valid Entries Are…"
echo "Tape Device: rmt0, rmt1, rmt3"
echo "Mail Admin: yes, no"
echo "Backup Type: full, normal, sybase "
while :
do
echo -n -c "\n\n Tape Device To Be Used For This Backup [$_DEVICE] :"
read T_DEVICE
: ${T_DEVICE:=$_DEVICE}
case $T_DEVICE in
rmt0|rmt1|rmt3) break;;
*) echo "The devices are either… rmt0, rmt1, rmt3"
esac
done
#если пользователь нажимает клавишу ввода при установке курсора в любом
#из полей, применяются настройки, заданные по умолчанию
while :
do
echo -n "Mail Admin When Done [$INFORM] :"
read T_INFORM
: ${T_INFORM:=$_INFORM}
case $T_INFORM in
yes|Yes) break;;
no|No) break;;
*) echo "The choices are yes, no";;
esac
done
while :
do
echo -n " Backup Type [$_TYPE] :"
read T_TYPE
: ${T_TYPE:=$_TYPE}
case $T_TYPE in
Full|full) breaks;;
Normal|normal)break;;
Sybase|sybase)break;;
*) echo "The choices are either… full, normal, sybase";;
esac
done
#повторное
присваивание значений временных переменных исходным переменным,#которые были загружены
_DEVICE=$T_DEVICE;
_INFORM=$T_INFORM;
_INFORM=$T_INFORM
}
show_settings
# отображение текущих настроек
{
cat << MAYDAY
Default Settings Are…
Tape Device To Be Used : $_DEVICE
Mail Admin When Done : $_INFORM
Type Of Backup : $_TYPE
Log file of backup : $_LOGFILE
MAYDAY
}
get_code
{
#пользователи имеют 3 попытки для ввода правильного кода
#_CODE загружается из исходного файла
clear
header
_COUNTER=0
echo "YOU MUST ENTER THE CORRECT CODE TO BE ABLE TO CHANGE DEFAULT SETTINGS"
while :
do
_COUNTER=`expr $_COUNTER + 1`
echo -n "Enter the code to change the settings:"
read T_CODE
# echo $_COUNTER
if [ "$T_CODE"="$_CODE" ]; then
return 0
else
if [ "$_COUNTER" -gt 3 ]; then
echo "Sorry incorrect code entered, you cannot change the settings.." return 1
fi
fi
done
}
check_drivef {
# перемотка ленты
mt -f /dev/$_DEVICE rewind > /dev/null 2>&1
if [ $?
– ne 0 ]; then
return 1 else
return 0
fi
)
#========== main ==============
# чтение файла с параметрами
check_source
header
#отображение содержимого переменных show_settings
#уточнение у пользователя, желает ли он изменить настройки
if continue_prompt "Do you wish To Change Some Of The System Defaults" "Y"; then
# да, тогда введите имя
if get_code; then
# изменение параметров change_settings fi fi
# параметры получены, резервное копирование
if check_drive; then
echo "tape OK…."
else
echo "Cannot rewind the tape..is it in the tape drive ???"
echo "Check it out"
exit 1
fi
# что копировать
case $_TYPE in
Full|full)
BACKUP_PATH="sybase syb/support etc var bin apps use/local";;
Normal|normal)
BACKUP_PATH="etc var bin apps usr/local";;
Sybase|sybase)
BACKUP_PATH="Sybase syb/support";;
esac
# резервное копирование
cd /
echo "Now starting backup "
find $BACKUP_PATH -print | cpio -ovB -O /dev/$_DEVICE >> $_LOGFILE 2>&1
#если приведенная выше команда cpio не выполняется в системе,
#воспользуйтесь командой cpio, приведенной ниже
#find $BACKUP_PATH -print [ cpio -ovB > /dev/$_DEVICE >> $_LOGFILE 2>&1
#для получения дополнительной информации измените -ovB на -ovcC66536