【问题标题】:BASH - while loop not rechecking fileBASH - while循环不重新检查文件
【发布时间】:2018-01-18 14:34:50
【问题描述】:

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

我编写了一个完整的循环来运行文件并确定传输是否失败或被跳过。

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

【问题讨论】:

  • @ViktorKhilin 不,这种语法很好,除非你说你不能使用 Bash 结构,但它被标记为“bash”。
  • 好吧,你不会再次执行grep。你在期待什么?变量会神奇地改变自己吗? :)
  • 谢谢@PesaThe - 我盯着这个看了好久,似乎总是错过一些小事!漫长的一天!

标签: linux bash loops while-loop


【解决方案1】:

您的 greps 在 while 循环之前被评估并且不会再改变。

$failed$skipped 的赋值移动到while 循环内部,紧跟do 行。

【讨论】:

  • 谢谢,这正是我所需要的。我盯着这个看了好久,似乎总是错过一些小事!漫长的一天!
【解决方案2】:

如果您在一个系统中进行了备份,并且您必须检查备份是否可以正常发送到另一个系统,您最好进行某种测试以确保传输后两个文件相同。一种是简单地传输它的两个副本,或者更好的是,传输文件的副本和校验和(例如用shasum(1)制作)在接收端,您可以检查shasum(1)命令是否给出相同的数字,如果是,则声明备份已成功传输。

【讨论】:

    猜你喜欢
    • 2019-11-23
    • 2017-04-03
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多