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

Bash中curl脚本语法错误排查及HTTP状态输出咨询

问题描述

我在Bash中执行以下脚本:

read -p "Server: " SERVER
read -p "Username: " NAME
read -p "UserPassword: " USERPASSWORD
curl -s -u ${NAME}:${USERPASSWORD} http://<REMOTE_SERVER_DETAILS>
if [ $http_response != "200" ] then
   echo "Error" 
else
   echo "Created Successfully."    
fi

curl命令能正常运行,但脚本报错:

syntax error near unexpected token `else'

我希望仅向用户输出HTTP响应状态码,想请教:

  1. 该语法错误的原因是什么?
  2. 如何输出错误信息?
问题解答

一、语法错误的原因

Bash的if语句有严格的语法要求:

  • if条件的闭合方括号]后面必须添加分号;,或者将then单独放在下一行。
    你的代码里if [ $http_response != "200" ] then把条件判断和then连在一起,没有添加分隔符,导致Shell解析失败,触发syntax error。

另外还有一个隐藏问题:你没有将curl的HTTP响应状态码捕获到$http_response变量中,当前脚本里的$http_response是空值,即便修复语法错误,逻辑也无法正常工作。

二、修正方案(输出状态码+错误处理)

要捕获curl的HTTP状态码,需要使用-w "%{http_code}"参数让curl输出状态码,同时用-o /dev/null屏蔽响应内容,最后通过命令替换将状态码存入变量。修正后的脚本如下:

read -p "Server: " SERVER
read -p "Username: " NAME
read -p "UserPassword: " USERPASSWORD
# 捕获HTTP状态码,屏蔽响应体内容
http_response=$(curl -s -o /dev/null -w "%{http_code}" -u "${NAME}:${USERPASSWORD}" "http://${SERVER}")
# 修复if语句语法,添加分号分隔条件与then
if [ "$http_response" != "200" ]; then
   echo "错误:HTTP响应状态码为 ${http_response}"
else
   echo "创建成功,HTTP响应状态码为 ${http_response}"    
fi

关键修改说明:

  1. 修复if语法:在]后添加分号;,确保Shell能正确解析条件判断和分支语句的边界。
  2. 捕获状态码:通过-w "%{http_code}"指定curl输出状态码,-o /dev/null丢弃不需要的响应体,用$(...)将结果存入$http_response变量。
  3. 变量加双引号:给$http_response添加双引号,避免变量为空或含空格时触发语法错误。
  4. 错误信息优化:输出具体的状态码,让用户能直接定位问题类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 19:48:16