#!/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" 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