#!/bin/bash
# Скрипт для работы с проектами
# Автор: Роман Коноплев (korodm@gmail.com)
# Функция вывода справки
function help() {
echo "Скрипт для работы с проектами"
echo
echo "Использование: `basename ${0}` -options project_name"
echo "Опции:"
echo " -c Создать проект"
echo " -r Удалить проект"
echo " -h Коммит проекта"
echo " -m Создание/удаление/коммит вместе с базой данных"
echo " (использовать с -c, -r или -h)"
echo
echo " -i Вывод этой справки"
echo
}
################################################################################
# Стандартные переменные
################################################################################
# Рабочий каталог
WORK_DIR="/home/korodm/Documents/sites/"
# Форматирование вывода
END=$(tput hpa $(tput cols))$(tput cub 6)
RED=$(tput setf 4)
GREEN=$(tput setf 2)
RESET=$(tput sgr0)
################################################################################
# Проверки
################################################################################
# Проверка на наличие передаваемых параметров
if ! [ -n "${2}" ]
then
help
exit 1
else
SITE=${2}
fi
# Проверка рабочего каталога
while [[ ! -d ${WORK_DIR} ]]
do
printf "path to work dir: "
read WORK_DIR
done
# Если рабочий каталог был указан без / вконце, добавим этот слэш
if [[ "${WORK_DIR: -1}" != "/" ]]
then
WORK_DIR=${WORK_DIR}''"/"
fi
################################################################################
# Блок функций
################################################################################
# Функция создания проекта
function create() {
# Проверка на существование каталога для сайта в рабочем каталоге
while [[ -d "${WORK_DIR}${SITE}" ]]
do
printf "path to project dir: "
read SITE
done
mkdir ${WORK_DIR}${SITE}
# Создание index.php
printf "<h1>Сайт %s работает!</h1>
<h2>%s%s/index.php</h2>
<?php phpinfo(); ?>" ${SITE} ${WORK_DIR} ${SITE} > ${WORK_DIR}${SITE}/index.php
echo "Создание сайта ${SITE}${END}${GREEN}[OK]${RESET}"
}
# Функция удаления проекта
function delete() {
# Проверка на существование каталога для сайта в рабочем каталоге
while [[ ! -d "${WORK_DIR}${SITE}" ]]
do
printf "path to project dir: "
read SITE
done
rm -R ${WORK_DIR}${SITE}
echo "Удаление сайта ${SITE}${END}${GREEN}[OK]${RESET}"
}
# Функция коммита
function commit() {
# Проверка на существование каталога для сайта в рабочем каталоге
while [[ ! -d "${WORK_DIR}${SITE}/.hg" ]]
do
printf "path to project dir: "
read SITE
done
cd ${WORK_DIR}${SITE}
for i in $(find . -type f -name "*.php")
do
if ! php -l ${i} > /dev/null
then
echo "Найдены ошибки ${SITE}${END}${RED}[FAIL]${RESET}"
exit 1
fi
done
hg addremove
hg commit
hg push
cd - > /dev/null
echo "Коммит сайта ${SITE}${END}${GREEN}[OK]${RESET}"
}
# Функция создания базы данных
function mysql_create() {
mysql -uroot -p --execute="create database ${SITE};"
mysql -uroot -p --execute="GRANT ALL PRIVILEGES ON ${SITE}.* TO ${SITE}@localhost IDENTIFIED by '${SITE}' WITH GRANT OPTION;"
echo "Создание базы данных ${SITE}${END}${GREEN}[OK]${RESET}"
}
# Функция удаления базы данных
function mysql_delete() {
mysql -uroot -p --execute="drop database ${SITE};"
mysql -uroot -p --execute="USE mysql; DELETE FROM user WHERE User='${SITE}';"
echo "Удаление базы данных ${SITE}${END}${GREEN}[OK]${RESET}"
}
# Функция бэкапа базы данных для последующего коммита
function mysql_backup() {
# Проверка на существование каталога для сайта в рабочем каталоге
while [[ ! -d "${WORK_DIR}${SITE}/.hg" ]]
do
printf "path to project dir: "
read SITE
done
cd ${WORK_DIR}${SITE}
mysqldump -uroot -p ${SITE} > mysql-`date +%m%d%y`.sql
echo "Бэкап базы ${SITE}${END}${GREEN}[OK]${RESET}"
}
################################################################################
# Основной скрипт
################################################################################
if [ $# -eq 0 ] # Сценарий вызван без аргументов?
then
help
exit 65
fi
while getopts ":crhi" OPTION
do
case ${OPTION} in
c ) while getopts ":m" OTHER_OPTION
do
case ${OTHER_OPTION} in
m ) create
mysql_create
exit 0 ;;
* ) echo "Недопустимый сценарий"
exit 1 ;;
esac
done
create
exit 0 ;;
r ) while getopts ":m" OTHER_OPTION
do
case ${OTHER_OPTION} in
m ) delete
mysql_delete
exit 0 ;;
* ) echo "Недопустимый сценарий"
exit 1 ;;
esac
done
delete
exit 0 ;;
h ) while getopts ":m" OTHER_OPTION
do
case ${OTHER_OPTION} in
m ) mysql_backup
commit
exit 0 ;;
* ) echo "Недопустимый сценарий"
exit 1 ;;
esac
done
commit
exit 0 ;;
i ) help
exit 0 ;;
* ) echo "Недопустимый сценарий"
exit 1 ;;
esac
done
exit 0;