linux - BASH - while 循环不重新检查文件

标签 linux bash loops while-loop

我正在为一些基本逻辑而苦苦挣扎,我希望有人能帮助我。

我编写了一个完整的小循环来遍历文件并确定传输是失败还是被跳过。

如果不是,则它会声明“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/

相关文章:

bash - 从字符串中提取模式

Linux shell (Bash/Z shell) - 在特定目录下更改背景颜色

multithreading - 在线程之间划分循环迭代

multithreading - OpenMP 5.1 规范是否允许使用非矩形循环的折叠子句?

linux - 如何从字符串中删除一些字符?

c - 打开终端并使用c语言在打开的终端中执行命令

bash - 找到子目录下的pom,执行mvn clean

java - 添加循环结果

linux - FreeBSD 上的每个挂载都需要 10% "root space"吗?

linux - [-f : command not found