linux - 在无限循环中逐行读取文件直到中断
问题描述
我正在尝试实现一个无限循环 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中实现类似上面的东西?
与往常一样,提前感谢您。
解决方案
您需要两个嵌套循环:一个外部无限循环和一个从输入文件读取每一行的内部循环。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
推荐阅读
- javascript - 使用 Contact Form 7 Wordpress 插件中的 javascript 在提交时将隐藏字段的值更改为复选框的值
- json - 如何忽略配置单元中的顶点失败错误
- sql - 如何合并两个表以覆盖空值并按时间戳排序?
- c++ - 将 QPushButton::clicked 信号连接到插槽时出错
- angular - 如何检查表单是否至少有一个具有数据的输入 Angular 2+ Form Validation
- cordova - Ionic 3 在 iOS 上禁用滚动反弹效果
- python - Python CSV 解析和文件生成
- c# - 正则表达式在 HTML 中查找特定标签
- python - 如何将输出文本导出到文件
- excel - Excel公式将包含周、天、小时的字符串转换为小时