当前位置: 首页 > news >正文

linux shell looop循环写法

在 Linux Shell 中编写loop循环的常见方法有以下几种,适用于持续执行任务或监控场景:


1. while true 循环(最常用)

while true; do
  # 循环体内的命令
  echo "Running..."
  sleep 1  # 避免 CPU 占用过高
done
 

终止方式:按 Ctrl + C(发送 SIGINT 信号)。


2. for 循环的无限写法


for ((;;)); do
  # 循环体内的命令
  echo "Infinite loop"
  sleep 1
done

3. until false 循环


until false; do
  # 循环体内的命令
  echo "Looping..."
  sleep 1
done

4. 带条件的退出控制

如果需要在满足条件时退出循环,可结合 break


while true; do
  # 检查某个条件
  if [ -f "/tmp/stop" ]; then
    echo "Exit loop"
    break
  fi
  echo "Working..."
  sleep 1
done

当创建文件 /tmp/stop 时,循环终止:


touch /tmp/stop

5. 后台运行loop循环

将循环放到后台执行(避免阻塞终端):


while true; do
  # 后台任务(如监控日志)
  tail -f /var/log/syslog
  sleep 5
done &

终止后台循环

  1. 查找进程 ID:jobs -l

  2. 杀进程:kill %1(假设作业号为1)


关键注意事项

  1. 避免 CPU 过载
    在循环体内添加 sleep(如 sleep 1)以降低资源消耗。

  2. 信号处理
    可捕获 SIGINT(Ctrl+C)或 SIGTERM 信号实现优雅退出:

    
    trap "echo 'Exiting...'; exit" SIGINT SIGTERM
    while true; do
      echo "Running..."
      sleep 1
    done

  3. 日志记录
    建议将输出重定向到日志文件,避免终端阻塞:

    
    while true; do
      echo "$(date): Task running" >> /var/log/myloop.log
      sleep 60
    done


实际应用场景

  • 监控文件变化

    
    while true; do
      if [ -f "/tmp/trigger" ]; then
        echo "Trigger file found!"
        rm -f /tmp/trigger
      fi
      sleep 1
    done

  • 服务保活

    
    while true; do
      if ! pgrep "my_service" > /dev/null; then
        echo "Restarting my_service..."
        /path/to/my_service &
      fi
      sleep 10
    done


根据需求选择合适的方法,并确保循环内有可控的退出机制!

http://www.dtcms.com/a/122286.html

相关文章:

  • 回溯——固定套路 | 面试算法12道
  • 研究嵌入式软件架构时遇到的初始化堆栈溢出问题
  • 用Python爬虫抓取数据并保存为JSON的完整指南
  • GitHub 克隆/下载失败的解决方案
  • NOIP2011提高组.玛雅游戏
  • 【AAOS】【源码分析】CarAudioService(二)-- 功能介绍
  • 单旋翼无人机(直升机)和四旋翼无人机优势对比
  • 2.BGP水平分割
  • VS Code Markdown渲染配置
  • vue+d3js+fastapi实现天气柱状图折线图饼图
  • XXE漏洞深度解析:原理、利用与防御
  • 详细解读react框架中的hooks
  • 从零推导飞机小扰动运动线性方程——0. 学习目录
  • Git版本管理系列:(二)多分支操作
  • 数据结构与算法-图论-复习2(差分约束,强连通分量,二分图,LCA,拓扑排序,欧拉路径和欧拉回路)
  • 使用stream的Collectors.toMap()方法常见问题
  • 数字电子技术基础(四十一)——数据选择器
  • 【Python教程】Python爬虫代码实现Java核心数据整理
  • python 如何安装wxpython
  • Meta 最新 AI 模型系列 ——Llama 4
  • COM通信 - TJA1145收发器
  • 数字图像处理作业2
  • 【回眸】Linux 内核 (十六) 之 多线程编程 下
  • 基于Python的心衰疾病数据可视化分析系统
  • 【论文精读】Multi-scale Neighbourhood Feature Interaction Network
  • JavaScript Hook JSON.stringify和JSON.parse:逆向与修改实战指南
  • AWS弹性容器服务(AWS Elastic Container Service,ECS)概述
  • js中this指向问题
  • deque容器
  • 排序算法(快速排序,选择排序......)【泪光2929】