Я пишу сценарий автоматического резервного копирования и зеркалирования, который будет более или менее копировать файлы, базу данных, разрешения на установку и слегка изменять зеркальные файлы, чтобы они работали на другом сервере с файлом резервной копии.Я написал и настроил все остальное, кроме переконфигурации.Все мои попытки потерпели неудачу, и я не знаю, как обойти это.
Итак, это подходящие строки (модифицированные для публичного использования):
FOLDER="kf.hammertime.com.au"
SERVER="fulcan"
BACKUPUSER="backupclient3"
DESTINATION="/var/www/Backup-Server"
SOURCE="/var/www"
RECONFIG="1"
if [ "${RECONFIG}" = "1" ]
then
#Original to be replace
echo Reconfiguring website for the mirrored site.
REPLACESTRING10="define (\'ROOT_PATH\', \'\/var\/www\/${FOLDER}\/trunk\')"
REPLACESTRING20="define ('DB_PASSWORD', 'hammertime1')"
REPLACESTRING30="define ('DB_USERNAME', 'hammertime2')"
REPLACESTRING40="define ('DB_HOST', 'localhost')"
#String to be replaced
REPLACESTRING11="define ('ROOT_PATH', '${SOURCE}\/${FOLDER}')"
REPLACESTRING21="define ('DB_PASSWORD', 'hammertime3')"
REPLACESTRING31="define ('DB_USERNAME', 'hammertime4')"
REPLACESTRING41="define ('DB_HOST', 'hammertime5')"
REPLACESTRING12="define (\'ROOT_PATH\', \'${SOURCE}\/${FOLDER}\/trunk\')"
echo ${REPLACESTRING10}
#Reconfigure various configuration files for Backup-Server active use
#find /your/home/dir -name "*.txt" | xargs perl -pi -e 's/stringtoreplace/replacementstring/g'
#Edits the files regardless if its in trunk or not. Will come up with errors.
#sudo replace "${REPLACESTRING10}" "${REPLACESTRING12}" <${DESTINATION}/${FOLDER}/trunk/lib/config.php> ${DESTINATION}/${FOLDER}/trunk/lib/config2.php
#sudo sed -i s/"${REPLACESTRING10}"/"${REPLACESTRING12}"/g ${DESTINATION}/${FOLDER}/trunk/lib/config.php
#sudo perl -i -p -e 's{${REPLACESTRING10}}{${REPLACESTRING12}}g' ${DESTINATION}/${FOLDER}/trunk/lib/config.php
sudo sed -i 's/${REPLACESTRING10}/${REPLACESTRING12}/g' ${DESTINATION}/${FOLDER}/trunk/lib/config.php
#sudo sed -i 's/${REPLACESTRING10}/${REPLACESTRING11}/g' ${DESTINATION}/${FOLDER}/lib/config.php
#sudo sed -i 's/${REPLACESTRING20}/${REPLACESTRING21}/g' ${DESTINATION}/${FOLDER}/trunk/lib/config.php
#sudo sed -i 's/${REPLACESTRING20}/${REPLACESTRING21}/g' ${DESTINATION}/${FOLDER}/lib/config.php
#sudo sed -i 's/${REPLACESTRING30}/${REPLACESTRING31}/g' ${DESTINATION}/${FOLDER}/trunk/lib/config.php
#sudo sed -i 's/${REPLACESTRING30}/${REPLACESTRING31}/g' ${DESTINATION}/${FOLDER}/lib/config.php
#sudo sed -i 's/${REPLACESTRING40}/${REPLACESTRING41}/g' ${DESTINATION}/${FOLDER}/trunk/lib/config.php
#sudo sed -i 's/${REPLACESTRING40}/${REPLACESTRING41}/g' ${DESTINATION}/${FOLDER}/lib/config.php
fi
Короче говоря, строка"sudo sed -i 's / $ {REPLACESTRING10} / $ {REPLACESTRING12} / g' $ {DESTINATION} / $ {FOLDER} /trunk/lib/config.php" не очень хорошо воспринимает переменные.
Итак, я попытался использовать альтернативу perl, но безрезультатно (но я мог бы это заметить).Большинство моих попыток перечислены там.А также заменить.
Мне просто нужно изменить определенные строки (нумерация строк может измениться) в одном файле.
Заранее спасибо за ваше время и терпение (Кстати, это первый раз, когда я пишу сценарий SH, я привык к BAT, так что я уверен, что у меня есть немало, но он работает без ошибок)
РЕДАКТИРОВАТЬ: кусок файла выглядит так:
define ('ROOT_PATH', '/var/www/kf.hammertime.com.au/trunk');
define ('DB_HOST', 'hammertime1');
define ('DB_USERNAME', 'hammertime2');
define ('DB_PASSWORD', 'localhost');
И я хочу изменить его на:
define ('ROOT_PATH', '/var/www/Backup-Server/kf.hammertime.com.au/trunk');
define ('DB_HOST', 'hammertime3');
define ('DB_USERNAME', 'hammertime4');
define ('DB_PASSWORD', 'hammertime5');
Нонекоторые из этих отредактированных элементов будут переменными ...