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

Shell脚本中Impala查询结果条件判断不生效 仅执行else分支求助

Shell脚本告警逻辑异常排查方案

核心问题原因

  • Impala查询返回字段不符合预期:当前SQL返回calendar和row_count两个字段,变量strata最终存储的是类似20240520 1234的带空格字符串,不可能和数值0相等,所以if判断永远不触发。
  • 无匹配记录时返回值不是0:当WHERE条件过滤后无匹配数据时,你加了GROUP BY calendar的查询返回的是空值而不是0,也无法匹配等于0的判断逻辑。
  • Shell语法不严谨:if判断中$strata没有加双引号包裹,当变量为空或者包含空格时会触发语法错误,导致条件判断失效直接走else分支。
  • Shebang声明错误:开头的解释器声明写为#!bin/sh,缺少根路径斜杠,部分系统下会无法正确识别sh解释器。

修复方案

修改SQL仅返回统计计数,同时修正Shell判断语法,修复后脚本如下:

#!/bin/sh
# 仅返回统计计数,无匹配时也会返回0而不是空
strata=$(impala connection string -q "SELECT COUNT(*) row_count FROM TABLE   
 WHERE calendar = CAST(from_unixtime(unix_timestamp(now() - interval 1 days), 'yyyyMMdd') AS INT);")

# 变量加双引号包裹,兼容空值异常场景
if [ "$strata" -eq 0 ] ;then
echo -e 'The table HAS NOT been refreshed today, kindly hold' |  mailx -s 'Alerting:Refresh_Status' -c email.address -- email.address
else
echo -e "The number of records is $strata" |  mailx -s 'Alerting: Refresh_Status' -c email.address -- email.address 
fi

你可以在变量赋值后添加一行echo "strata的值为: $strata",执行脚本查看输出确认变量值是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:24:05