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

Shell脚本调用JIRA API时出现curl: (3) URL格式错误问题求助

排查Shell脚本中curl的url malformed错误

我帮你梳理了几个大概率导致这个错误的关键点,一个个来解决:

1. 最后一个curl命令的中文破折号是致命问题

看脚本最后一行的–sS,这是中文长破折号,不是英文环境下的短横线-。curl无法识别这个“选项”,会直接把它当成URL的一部分,自然就触发了url malformed错误。

修正后的最后一行curl(顺便把硬编码日期改成你定义的DueDate变量,符合脚本逻辑):

curl -sf -u "${ADMIN_USER}":"${ADMIN_PWD}" -i -H "Content-Type: application/json" "${jiraURL}" -d '{"update": { "duedate": [ {"set": "'"${DueDate}"'"} ] } }' -X PUT -sS

2. 未初始化的folder和instance变量

脚本里多处用到了${folder}和${instance},但我没看到你给这两个变量赋值的代码!如果它们是空值,while循环里的if [[ "${folder}" = $WORD1 ]]条件永远不会成立,jiraURL就会一直保持初始值http://cde-jira.com/rest/api/latest/issue/——这个URL是不完整的,JIRA的REST API要求必须指定具体的issue ID(比如/issue/DEVOPS-123),请求这个不完整的URL也会触发格式错误。

解决方法:在脚本开头添加变量赋值(替换成你的实际值):

# 请根据实际场景赋值
folder="target-folder-name"
instance="your-instance-id"

3. jiraURL可能被重复拼接导致无效

如果你的输入文件testJira.txt里有多行匹配${folder}的值,jiraURL会被多次拼接,比如第一次变成http://.../issue/ISSUE-123,第二次又加上另一个issue ID,变成http://.../issue/ISSUE-123ISSUE-456,这显然是个无效URL。

解决方法:

  • 确保输入文件中只有一行匹配${folder}的值;
  • 或者在每次循环前重置jiraURL为初始值,避免重复拼接:
while IFS=: read -r WORD1 WORD2; do
    # 每次循环重置jiraURL到初始状态
    jiraURL="http://cde-jira.com/rest/api/latest/issue/"
    if [[ "${folder}" = $WORD1 ]]; then
        echo "${instance}"-"$folder" JIRA found
        echo $WORD2
        jiraURL="${jiraURL}${WORD2}"
        echo "${jiraURL}"
    fi
done < "${input}"

调试小技巧

建议在每个curl命令前加上echo,先打印完整的命令,直观检查URL和参数是否正确:

echo "Executing curl command: curl -sf -D- -u ... ${jiraURL}"
curl -sf -D- -u "${ADMIN_USER}":"${ADMIN_PWD}" -X PUT -d "{\"update\": {\"comment\": [{\"add\": {\"body\": \""${instance}"-"${folder}" migration has been initiated on $Date\"}}]}}" -H "Content-Type: application/json" "${jiraURL}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:32:57