0

我正在尝试运行一个小备份脚本,但我有点卡住了一些可能很简单的东西,但我无法让它工作。

我在备份的每个部分(每个部分都使用单独的脚本调用)之后使用 echo "backup 1 started" / echo "backup 1 ends"。这一直运行良好,但我想使用更多变量,以便之后更容易编辑。

这是我的测试脚本

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

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


编辑:

对不起,我在这里做什么误导了你们。在这里您可以看到完整的备份脚本。它只调用各个备份脚本并将输出放入日志文件。所以我只是通过 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 |” 输出...

问候大卫

4

2 回答 2

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
于 2013-06-04T23:59:57.390 回答
0

这不一定有效:

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

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

startecho="$(echo "$(date +%F_%T) | dobackup.sh | Backup "$bc" started!")"
于 2013-06-05T00:23:28.213 回答