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
相关产品推荐
相关产品推荐

