我正在努力学习一些基本的逻辑,我希望有人能帮我。
我写了一个完整的循环来运行一个文件,并确定传输是否失败或被跳过。
如果不是这样,它声明“备份是好的”并且干净地退出。
如果失败,则声明“备份不好”,直到达到最大重试次数5次。
理论上是,如果正在检查的文件更改(在这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
最佳答案
您的grep
s在while循环之前进行评估,并且不会再更改。
将赋值移到$failed
并将$skipped
移到while循环的内部,就在do
行之后。