2013-06-04 153 views
-1

我想获得一个小的Backupscript运行,我有点卡住了可能很容易,但我不能让它工作。Bash:更新使用更新变量的变量

在备份的每个部分(每个都用单独的脚本调用)后,我使用echo“备份1启动”/ echo“备份1结束”。这一直运行良好,但我想使用更多的变量,因此它更易于编辑之后。

这里是我的testscript

#!/bin/bash 
# Backupcountervariable 
bc=1 
# Startbackup 
startecho="echo $(date +%F_%T) | dobackup.sh | Backup "$bc" started!" 
# Endbackup 
endecho="echo $(date +%F_%T) | dobackup.sh | Backup "$bc" ended!" 

echo $bc 
$startecho 
$endecho 
bc=$(($bc+1)) 
echo $bc 
$startecho 
$endecho 

变量BC之间得到更新,我知道。我认为我的问题是一个$startecho$endecho被启动,他们不更新$bc

任何提示如何更新变量内的变量?


编辑:

对不起,误导您对IAM在这里做什么家伙。在这里你可以看到完整的备份脚本。它只调用单个备份并将输出放到日志文件中。 所以我只是通过cron执行这个脚本,而不是5个脚本。

#!/bin/bash 
# Backupscripte ausfuehren 0.5 
# Created: 2013/05/30 22:00 
# Updated: 2013/06/05 02:31 
# 0.5: Log verbessert, teamspeak hinzugefuegt, backupcounter 
# 0.6: funktionen eingebaut, uebersichtlichkeit verbessert 

### Variablendeklaration 
# Log Variable definieren 
logfile="/var/log/dobackup.log" 
# Backupcountervariable 
bc=1 
# Backupcounterincrement 
function bci() { bc=$((bc+1)) ; } 
# Startbackup 
function startecho() { echo "$(date +%F_%T) | dobackup.sh | Backup $bc gestartet!" >>$logfile ; } 
# Endbackup 
function endecho() { echo "$(date +%F_%T) | dobackup.sh | Backup $bc beendet!" >>$logfile ; } 


# Start des Backups Ausgeben 
echo "----------------------------------------------------------------" >>$logfile 
echo "$(date +%F_%T) | dobackup.sh | FULL BACKUP GESTARTET!" >>$logfile 

#### /var/www Backup 
# Start Backup ausgeben 
startecho 
# Backupscript ausfuehren 
sh /root/varwwwbackup.sh >>$logfile 
# Ende Backup ausgeben 
endecho 
# Increment Backupcounter 
bci 

#### /var/customers Backup 
# Start Backup ausgeben 
startecho 
# Backupscript ausfuehren 
sh /root/customersbackup.sh >>$logfile 
# Ende Backup ausgeben 
endecho 
# Increment Backupcounter 
bci 

#### Mysqldump Backup 
# Start Backup ausgeben 
startecho 
# Backupscript ausfuehren 
sh /root/mysqlbackup.sh >>$logfile 
# Ende Backup ausgeben 
endecho 
# Increment Backupcounter 
bci 

### TS3 Backup 
# Start Backup ausgeben 
startecho 
# Backupscript ausfuehren 
sh /root/tsbackup.sh >>$logfile 
# Ende Backup ausgeben 
endecho 
# Increment Backupcounter 
bci 



# Cleanup Backup FTP, remove files older then 30 days 
echo "$(date +%F_%T) | dobackup.sh | Cleanup fuer den Backup FTP Server begonnen..." >>$logfile 
#sh /root/cleanbackup.sh >>$logfile 
echo "$(date +%F_%T) | dobackup.sh | Cleanup fuer den Backup FTP Server abgeschlossen!" >>$logfile 

# Ende des Backups Ausgeben 
echo "$(date +%F_%T) | dobackup.sh | FULL BACKUP BEENDET!" >>$logfile 

所以我的日志是这样的:

---------------------------------------------------------------- 
2013-06-05_04:00:01 | dobackup.sh | FULL BACKUP GESTARTET! 
2013-06-05_04:00:01 | dobackup.sh | Backup 1 gestartet! 
2013-06-05_04:00:01 | Backupscript fuer /var/www/ gestartet! 
2013-06-05_04:00:01 | Verzeichnis gewechselt! Beginne damit das Verzeichnis einzupacken... 
2013-06-05_04:00:01 | Verzeichnis eingepackt! Beginne damit das Verzeichnis auf den FTP Server zu kopieren... 
2013-06-05_04:00:01 | Backup erfolgreich auf den FTP Server verschoben! Temporaere Dateien werden nun geloescht... 
2013-06-05_04:00:01 | Temporaere Dateien geloescht! 
2013-06-05_04:00:01 | Backupscript fuer /var/www/ abgeschlossen! 
2013-06-05_04:00:01 | dobackup.sh | Backup 1 beendet! 
2013-06-05_04:00:01 | dobackup.sh | Backup 2 gestartet! 
2013-06-05_04:00:01 | Backupscript fuer /var/customers/ gestartet! 
2013-06-05_04:00:01 | Verzeichnis gewechselt! Beginne damit das Verzeichnis einzupacken... 
2013-06-05_04:01:16 | Verzeichnis eingepackt! Beginne damit das Verzeichnis auf den FTP Server zu kopieren... 
2013-06-05_04:04:56 | Backup erfolgreich auf den FTP Server verschoben! Temporaere Dateien werden nun geloescht... 
2013-06-05_04:04:56 | Temporaere Dateien geloescht! 
2013-06-05_04:04:56 | Backupscript fuer /var/customers/ abgeschlossen! 
2013-06-05_04:04:56 | dobackup.sh | Backup 2 beendet! 
2013-06-05_04:04:56 | dobackup.sh | Backup 3 gestartet! 
2013-06-05_04:04:56 | Backupscript fuer mysqldump gestartet! 
2013-06-05_04:04:56 | Verzeichnis gewechselt! Beginne mit dem mysqldump... 
2013-06-05_04:04:56 | Mysqldump ausgefuehrt! Beginne mit dem einpacken des mysqldumps... 
2013-06-05_04:04:56 | SQL Backup eingepackt! Beginne damit das Backup auf den FTP Server zu kopieren... 
2013-06-05_04:04:56 | Backup auf FTP Server veschoben! Temporaere Files werden entfernt... 
2013-06-05_04:04:56 | Temporaere Files wurden entfernt! 
2013-06-05_04:04:56 | Backupscript fuer mysqldump abgeschlossen! 
2013-06-05_04:04:56 | dobackup.sh | Backup 3 beendet! 
2013-06-05_04:04:56 | dobackup.sh | Backup 4 gestartet! 
2013-06-05_04:04:56 | Backupscript fuer /home/ts3/ gestartet! 
2013-06-05_04:04:56 | Verzeichnis gewechselt! Beginne damit das Verzeichnis einzupacken... 
2013-06-05_04:08:47 | Verzeichnis eingepackt! Beginne damit das Verzeichnis auf den FTP Server zu kopieren... 
2013-06-05_04:17:08 | Backup erfolgreich auf den FTP Server verschoben! Temporaere Dateien werden nun geloescht... 
2013-06-05_04:17:08 | Temporaere Dateien geloescht! 
2013-06-05_04:17:08 | Backupscript fuer /home/ts3/ abgeschlossen! 
2013-06-05_04:17:08 | dobackup.sh | Backup 4 beendet! 
2013-06-05_04:17:08 | dobackup.sh | Cleanup fuer den Backup FTP Server begonnen... 
2013-06-05_04:17:08 | dobackup.sh | Cleanup fuer den Backup FTP Server abgeschlossen! 
2013-06-05_04:17:08 | dobackup.sh | FULL BACKUP BEENDET! 

截至目前只有dobackup.sh,那么 “| dobackup.sh |”输出...

问候 大卫

+0

请勿将代码放入变量中。您将代码转换为数据,然后将数据转化为代码。这违反了很多软件法律。 – lhunath

+0

'startecho'的值被赋予一个值,该值包含'bc'在赋值时的扩展版本......这是1.您必须推迟对字符串的评估,直到您设置了'bc'达到您所需的价值。但是你的代码......有点奇怪。避免将命令序列放入字符串中;这会让你的生活变得非常困难,特别是如果有任何争论含有必须保留的空间。你必须担心'eval'等。 –

+0

你误读的是,这是简单的“文本”IAM输出到日志文件。这不是备份本身。时间戳| dobackup.sh(这是执行各个备份脚本的脚本)|备份1/2/3 ...开始/结束! – David

回答

3

,而不是字符串,你应该使用shell函数:

function startecho() { date +%F_%T ; echo " dobackup.sh | Backup $bc started!" ; } 
function endecho() { date +%F_%T ; echo " dobackup.sh | Backup $bc ended!" ; } 

startecho 
endecho 
bc=$((bc+1)) 
startecho 
endecho 
+0

谢谢,这工作!尽管我不得不编辑它,因为你missunderstood我的输出^^(日期dobackup.sh属于语句/是写入日志)代码:function startecho(){echo“$(date +%F_%T) | dobackup.sh |备份$ bc开始!“ ; } – David

+0

@大卫:不客气! (而且,我编辑了我的答案。) – ruakh

0

这不一定会工作:

startecho="echo $(date +%F_%T) | dobackup.sh | Backup "$bc" started!" 

您需要把$(..)围绕整个echo声明:

startecho="$(echo "$(date +%F_%T) | dobackup.sh | Backup "$bc" started!")"