You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash循环,当指定命令返回255时跳转至下一个函数?

Bash循环脚本实现:等待psql命令返回指定退出码后执行后续函数

需求说明

  • 持续执行指定psql命令,检测PostgreSQL中是否存在特定idle状态的查询
  • 当psql命令返回退出码255时,退出循环并执行后续函数
  • 若返回其他值,等待20秒后再次检测

正确实现脚本

#!/bin/bash

# 封装要执行的psql检测命令
check_idle_query() {
    psql -d ct_fleet -t -c "select CASE when exists (select * from pg_stat_activity  where query like '%generate_trip_redo%' and state= 'idle' ) THEN 1 ELSE 255 END;"
}

# 定义后续要执行的函数(请根据实际需求修改内容)
next_function() {
    echo "开始执行后续操作..."
    # 在这里添加你的业务逻辑,比如日志记录、其他脚本调用等
}

# 核心循环检测逻辑
while true; do
    # 执行检测命令并捕获退出码
    check_idle_query
    exit_code=$?

    if [ $exit_code -eq 255 ]; then
        # 满足条件时执行后续函数并退出循环
        next_function
        break
    else
        # 未满足条件时等待20秒后重试
        sleep 20
    fi
done

原写法的问题说明

  • 缺少比较变量:原代码中if [ -eq 255 ]没有指定要比较的对象,Bash中需要用$?获取上一条命令的退出码,或者将命令结果赋值给变量后再比较
  • 未退出循环:原代码中没有break语句,即使触发条件也会继续循环,无法执行后续函数
  • 函数调用不规范:原代码中function没有指定具体函数名,不符合Bash语法规范

内容的提问来源于stack exchange,提问作者Conradb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:58:08