ПРИМЕР
#!/bin/bash
#################################################
#Keyfiles - tar/gzip configuration files #
#Version: Версия 1.0 (черновик) #
#Ackn: основан на идее Dave Turnbull #
#Authour: Thomas Adam #
#Date: Понедельник 28 мая 2001, 16:05 BST #
#Website: www.squidproxyapps.org.uk #
#Contact: thomas@squidproxyapps.org.uk #
########################################Комментарии
#Комментарии для Dave Turnbull. Чтобы он не заблудился :-).
#объявление переменных
configfile="/etc/keyfiles.conf"
tmpdir="/tmp"
wrkdir="/var/log/keyfiles"
tarfile=keyfiles-$(date +%d%m%Y).tgz
method=$1 #опции выбора операции
submethod=$2 #дополнительные опции для "$1"
quiet=0 #вывод отладочной информации (по умолчанию)
cmd=basename $0 #удаляем путь из имени файла
optfiles="Usage: $cmd [--default (--quiet)] [--listconffiles] [--restore (--quiet)] [--editconf] [--delold] [--version]"
version="keyfiles: Автор Thomas Adam, Версия 1.0 (Вторник 5 июня 2001, 23:42)"
#проверка конфигурационного файла...
if [ ! -e $configfile ]; then
for beepthatbell in 1 2 3 4 5; do
echo -en "\x07"
done
echo " " | mail -s "[Keyfiles]: отсутствует файл $configfile" $USER
echo " [Ошибка!]: отсутствует файл $configfile" $USER
exit -1
fi
#проверяем существование рабочей директории, если её нет, то создаём
[ ! -d $wrkdir ] && mkdir $wrkdir
#проверка того, запущен ли скрипт без опций
if [ -z $method ]; then
echo $optfiles
exit 0
fi
#синтаксический разбор командной строки
check_syntax ()
{
case $method in
--default)
cmd_default
;;
--listconffiles)
cmd_listconffiles
;;
--restore)
shift 1
cmd_restore
;;
--editconf)
exec $EDITOR $configfile
exit 0
;;
--delold)
cd $wrkdir && rm -f ./*.old > /dev/null
exit 0
;;
--version)
echo $version
exit 0
;;
--*|-*|*)
echo $optfiles
exit 0
;;
esac
}
#Вот теперь и начинается самое интересное.....
#объявление функции используемой опцией "--default"
cmd_default ()
{
#пакуем все файлы, указанные в $configfile
if [ $submethod ]; then
tar -cZPpsf $tmp/$tarfile $(cat $configfile) &>/dev/null 2>&1
else
tar -vcZPpsf $tmp/$tarfile $(cat $configfile)
fi
#если содержимое каталогов пусто......
if test $(ls -1 $wrkdir | grep -c -) = "0"; then
mv $tmp/$tarfile $wrkdir
exit 0
fi
for i in $(ls $wrkdir/*.tgz); do
mv $i $i.old
done
mv $tmp/$tarfile $wrkdir
}
#вывести список, содержащийся в $configfile
cmd_listconffiles ()
{
sort -o $configfile $configfile
cat $configfile
exit 0
}
#восстановить файлы......
cmd_restore ()
{
cp $wrkdir/keyfiles*.tgz /
cd /
#проверка флага тишины :-)
if [ $submethod ]; then
tar vzxfmp keyfiles*.tgz &>/dev/null 2>&1
rm -f /keyfiles*.tgz
exit 0
else
tar vzxfmp keyfiles*.tgz
rm -f /keyfiles*.tgz
exit 0
fi
}
#вызов головной функции
check_syntax-------------------
Следует заметить, что основные изменения, которые вы можете делать в скрипте -- это изменять три переменные:configfile="/etc/keyfiles.conf" tmpdir="/tmp" wrkdir="/var/log/keyfiles"
Комментариев нет:
Отправить комментарий