我正在努力学习一些基本逻辑,我希望有人可以帮助我。
我已经编写了一个完整的循环来运行文件并确定传输是否失败或被跳过。
如果不是那么它宣布“BACKUP IS GOOD”并且干净地退出。 如果失败则声明“BACKUP IS NOT GOOD”,直到达到最大重试次数为止。
理论上说,如果正在检查的文件发生变化(在那5次运行中的任何地方),那么它将变为“BACKUP IS GOOD”。
我遇到的问题是循环没有捕捉到这种变化。
任何建议都将受到赞赏。
max_retries="5"
backup_count="1"
failed=$(grep -c "Transfer failed: 0" "mylog.txt")
skipped=$(grep -c "Transfer skipped: 0" "mylog.txt")
while (( $max_retries >= $backup_count ))
do
if (( $skipped == 1 )) && (( $failed == 1 )); then
echo "BACKUP IS GOOD"
exit 0
elif (( $skipped != 1 )) || (( $failed != 1 )); then
echo "BACKUP IS NOT GOOD"
sleep 15
(( backup_count++ ))
fi
done
答案 0 :(得分:1)
你的grep
在while循环之前被评估,不会再改变了。
将$failed
和$skipped
的作业移至do
行后面的while循环内。
答案 1 :(得分:1)
如果您在一个系统中进行了备份,并且必须检查备份是否已发送到另一个系统,则最好进行某种测试以确保传输后两个文件都相同。一种是简单地传输它的两个副本,或者更好,传输文件的副本和校验和(例如用shasum(1)
制作)在接收方,你可以检查shasum(1)
命令给出相同的数字,如果是,则声明备份已成功转移。