我正在努力学习一些基本的逻辑,我希望有人能帮我。
我写了一个完整的循环来运行一个文件,并确定传输是否失败或被跳过。
如果不是这样,它声明“备份是好的”并且干净地退出。
如果失败,则声明“备份不好”,直到达到最大重试次数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

最佳答案

您的greps在while循环之前进行评估,并且不会再更改。
将赋值移到$failed并将$skipped移到while循环的内部,就在do行之后。

08-24 12:49