【发布时间】:2014-06-20 12:38:50
【问题描述】:
我正在编写一个 bash 脚本,它会备份到已安装的驱动器。
备份本身可以正常工作,但是即使在传输过程中出现错误,它也会说成功。
backup() {
echo -e "Backup Started\n" >> $1
echo -e "Mounting backup Drive" >> $1
mount $2 /mnt 2>>$1
if [ $? -eq 0 ] ; then
echo -e "Backup Drive: $2 mounted successfully" >> $1
cd /
echo -e "Sync data to $2\n" >> $1
nice -n 19 rsync -lHa --exclude-from '/opt/ts/bin/exclude.txt' / /mnt/ 2> ${ERROR}
local RETURNCODE=$?
if [ $RETURNCODE -eq 23 ] ; then backup_failed "Backup Warning: Some files did not copy" $1 $2; fi
if [ $RETURNCODE -eq 20 ] ; then backup_failed "Backup Failed: Transfer was terminated prematurely" $1 $2; fi
if [ $RETURNCODE -eq 11 ] ; then backup_failed "Backup Failed: Input/Output Error [URGENT]" $1 $2; fi
if [ $RETURNCODE -ne 0 ] ; then backup_failed "Backup Failed: Error while copying data" $1 $2; fi
echo -e "Backup completed Successfully with code $RETURNCODE `date`\n" >> $1
echo -e >> $1
printf "Time taken: "%dh:%dm:%ds"\n" $(($SECONDS/3600)) $(($SECONDS%3600/60)) $(($SECONDS%60)) >> $1
echo -e "##############################\n" >> $1
mkdir -p /mnt/mnt /mnt/proc /mnt/tmp /mnt/lost+found
cp -a /proc/mounts /proc/filesystems /mnt/proc
umount $2
fi
}
尽管 $RETURNCODE 给出的值为 20,但它不会触发。输出如下。
安装备份驱动器 备份驱动器:/dev/hda4 挂载成功 同步数据到 /dev/hda4
备份成功完成,代码 20 Sun May 4 11:04:48 EST 2014
耗时:0h:0m:3s
#如果有人有任何建议,将不胜感激:)
【问题讨论】:
-
set -x是你的朋友。跟踪脚本的执行,看看它实际在做什么。 -
另外,我强烈建议通过shellcheck.net 运行它——它有很多小错误可能与您的问题无关,但仍应修复。
标签: linux bash if-statement error-code