如何编写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
相关产品推荐
相关产品推荐

