首页 > 解决方案 > 在无限循环中逐行读取文件直到中断

问题描述

我正在尝试实现一个无限循环 bash 脚本,用于读取文件、执行某些操作并检查计数器条件,当计数器条件达到 0 时,它会跳出无限循环。我已经尝试了几次迭代,但没有一个对我有用。伪代码将是这样的..

#!/bin/bash
counter=10
while true
do
  read host from file
  ping -c 1 host > /dev/null
  if [ $? -eq 0 ]
  then
    (($counter+1))
    do_something_to_the_host
  else
    (($counter-1))
    if [ $counter -eq 0 ]
    then
      break # this breaks out of the while true infinite loop
    fi
  fi
done

谁能告诉我如何在bash中实现类似上面的东西?

与往常一样,提前感谢您。

标签: linuxbashshell

解决方案


您需要两个嵌套循环:一个外部无限循环和一个从输入文件读取每一行的内部循环。break接受一个数值参数来指定要跳出多少个循环。

counter=10
while true
do
  while read host
  do
    ping -c 1 host > /dev/null
    if [ $? -eq 0 ]
    then
      (($counter+=1))
      do_something_to_the_host
    else
      (($counter-=1))
      if [ $counter -eq 0 ]
      then
        break 2
      fi
    fi
  done < file
done

推荐阅读