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

sed正则与Linux条件判断优化:JIRA状态校验逻辑调整

JIRA状态判断逻辑修复方案

一、反转原test命令的逻辑

原命令的逻辑是:当JIRA状态为Done/Completed/Closed时输出「Found valid Jira」,其他状态输出无效提示。要反转逻辑(即状态为三者之一时输出无效提示,其余状态输出有效提示),可以修改为以下两种方式:

方式1:修改原有test命令

把判断空字符串的test -z改为判断非空的test -n:

test -n "$(echo ${JIRA_DETAIL} | jq '.fields.status.name' | sed -r "s/\"(Done|Completed|Closed)\"//")" && echo "Found valid Jira" || echo "Not a valid Jira (Closed/Completed/Done)"

说明:当状态为Done/Completed/Closed时,sed会把匹配内容替换为空,test -n判断结果为假,触发||输出无效提示;其他状态下sed不会替换,结果非空,test -n判断为真,输出有效提示。

方式2:用jq直接判断(更简洁直观)

避免字符串替换,直接用jq的in()函数判断状态是否在目标列表中:

if echo "${JIRA_DETAIL}" | jq -e '.fields.status.name | in(["Done", "Completed", "Closed"])' >/dev/null; then
    echo "Not a valid Jira (Closed/Completed/Done)"
else
    echo "Found valid Jira"
fi

说明:jq -e会让jq在判断结果为true时返回0(成功),false时返回1(失败),直接对应if的条件分支。

二、修复if-else语句的问题

你写的if-else代码存在两个核心问题:bash的[[ ]]中需要用=~做正则匹配,而非==;另外需要先正确提取不带引号的状态值。修复后的完整代码如下:

# 先提取纯文本格式的JIRA状态(-r参数让jq输出不带双引号的内容)
JIRA_STATUS=$(echo "${JIRA_DETAIL}" | jq -r '.fields.status.name')

if [[ "${JIRA_STATUS}" =~ ^(Done|Completed|Closed)$ ]]; then
    echo "Invalid JIRA (Done/Completed/Closed) found!"
    exit 1
else
    echo "Valid JIRA Id found!"
fi

关键修复点说明

  • 正则匹配用=~:bash的[[ ]]结构中,==是精确字符串匹配,=~才是正则匹配运算符。
  • 正则表达式^(Done|Completed|Closed)$:^和$确保完全匹配状态值,避免误判包含目标关键词的其他状态。
  • jq加-r参数:提取到的JIRA_STATUS是纯状态名(比如"In Progress"),而非带双引号的字符串,匹配更准确。

给正则新手的简单指引

  • 匹配指定值:判断字符串是否是目标列表中的一个,用=~ ^(值1|值2|值3)$,确保完全匹配。
  • 非匹配条件:如果要判断字符串不在目标列表中,只需在条件前加!,写法更直观:
    if ! [[ "${JIRA_STATUS}" =~ ^(Done|Completed|Closed)$ ]]; then
        echo "Valid JIRA Id found!"
    else
        echo "Invalid JIRA (Done/Completed/Closed) found!"
        exit 1
    fi
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:40:35