我正在为一些基本逻辑而苦苦挣扎,我希望有人能帮助我。
我编写了一个完整的小循环来遍历文件并确定传输是失败还是被跳过。
如果不是,则它会声明“BACKUP IS GOOD”并干净地退出。 如果它失败了,那么它会声明“BACKUP IS NOT GOOD”,直到它达到最大重试次数 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
会在 while 循环之前进行评估,并且不会再更改。
将对 $failed
和 $skipped
的赋值移动到 while 循环内,就在 do
行之后。
关于linux - BASH - while 循环不重新检查文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323697/