#!/bin/bash # Задаем базовые и стартовые значения переменных. BASE_NFSEN_BACKUP_DATA_DIR=/root/test-nfdump/profiles-data/live BASE_TAR_DIR=/root/test-nfdump/tar ROUTER=START-ROUTER YEAR=START-YEAR MONTH=START-MONTH # Выводим имена директорий в виде списка которые будут использоваться в цикле архивирования всех месяцев (MONTH=ALL) LIST_ONLY_FOLDER_NAME () { find $BASE_NFSEN_BACKUP_DATA_DIR/$ROUTER/$YEAR -maxdepth 1 -mindepth 1 -type d -printf '%f\n' } # Формируем справку. SHOW_HELP () { echo "Скрипт $0 предназначен для архивирования netflow данных которые были скописрованы с сервера flow1." echo "Данные сворачиваются в архив вида nfcapd-ciso1-201702.tar.bz2." echo "Скрипту обзательно надо дать три ключа: \"-r\", \"-y\", \"-m\"." echo "Ключ \"-r\" задает роутер, данные которого будут архивироваться." echo "Ключ \"-y\" указывает на год за который надо будет брать данные." echo "Ключ \"-m\" указывает на месяц за который надо брать данне для добавления в архив." echo "Ключ \"-m\" может иметь два значния - конкретный номер месяца (01, 02 и так до 12) или ALL (будут перебираться все месяцы в выбранном годе)." echo "Пример: \"$0 -r cisco6 -y 2015 -m {03|ALL}\"." } # Проверям наличие аргументов у скрипта. if [ $# -eq "0" ]; # Количество переданных скрипту агрументов ($#) равно нулю (значение NO_ARGS)? then echo "!!!" echo "Ошибка: Скрипт запускается без ключей и аргументов." echo "!!!" SHOW_HELP # Если да, то показать справку exit # и выйти fi #Работа с ключами. while getopts "r:y:m:" option # Определяем ключи и говорим, что после ключа обязательно должен быть аргумент. do case $option in r) ROUTER=$OPTARG;; # Присваеваем переменной значение аргумента y) YEAR=$OPTARG;; m) MONTH=$OPTARG;; *) echo "Выбран недопустимый ключ." # Если введен ключ который мы ранее не определили, то выводим сообщение exit;; # и выходим esac done # Проверяем, что скрипту были переданы три ключа с аргументами. # Если значение переменной совпадает со стартовым значением, значит ключ не был задан. if [ "$ROUTER" = "START-ROUTER" ]; then echo "!!!" echo "Ошибка: Не задан ключ \"-r\"." echo "!!!" SHOW_HELP exit elif [ "$YEAR" = "START-YEAR" ]; then echo "!!!" echo "Ошибка: Не задан ключ \"-y\"." echo "!!!" SHOW_HELP exit elif [ "$MONTH" = "START-MONTH" ]; then echo "!!!" echo "Ошибка: Не задан ключ \"-m\"." echo "!!!" SHOW_HELP exit elif [ "$MONTH" = "ALL" ]; # Запускаем цикл если с ключем было передано ALL. # Будет создано столько архивов, сколько месячных папок выдаст команда LIST_ONLY_FOLDER_NAME. then for MONTH in `LIST_ONLY_FOLDER_NAME` do tar -cjvf $BASE_TAR_DIR/nfcapd-$ROUTER-$YEAR$MONTH.tar.bz2 -C $BASE_NFSEN_BACKUP_DATA_DIR $ROUTER/$YEAR/$MONTH done else # Если с ключем -m был передан конкретный номер месяца, то делаем один архив. tar -cjvf $BASE_TAR_DIR/nfcapd-$ROUTER-$YEAR$MONTH.tar.bz2 -C $BASE_NFSEN_BACKUP_DATA_DIR $ROUTER/$YEAR/$MONTH fi