Net Go Easy

使用排障

下载的.sh其实是HTML?先检查地址和响应再运行

用 curl 保存响应头、核对最终地址与脚本首行,区分下载页面、重定向、登录页和真实脚本,避免把错误页面当作 shell 执行。

· 更新于

看到 <html> 或 <!DOCTYPE,就先停下来

运行刚下载的脚本时出现 syntax error near unexpected token,不一定是 Bash 版本太旧。可能只是把登录页、404页或带下载按钮的网页保存成了 .sh。

这时不要继续给文件加执行权限,也不要把它复制进管理员终端。先检查你已经下载的那个文件:

head -n 5 ./tool.sh

把 tool.sh 换成实际文件名。若开头是网页标记,先找真正的文件地址。真实脚本也不一定只有一种首行,但不能只靠扩展名判断内容。

1. 保存响应信息,而不是边下载边执行

下面用本站公开的诊断脚本演示完整下载过程:

curl --disable --fail --location --connect-timeout 3 --max-time 15 \
  --dump-header tool.headers --output tool.sh \
  --write-out 'HTTP=%{http_code} final=%{url_effective}\n' \
  https://netgoeasy.com/scripts/dns-check.sh
download_status=$?
printf 'download_exit=%s\n' "$download_status"

最后一行应显示download_exit=0;非0时停在这里,不执行后面的语法检查或运行命令。重新检查地址、网络和错误,再重新下载。

这里会创建 tool.headers 和 tool.sh。在空目录操作,或者先确认没有同名重要文件。不要把这条命令改成下载后直接接给 Bash 执行。

--fail 让 HTTP 错误状态返回失败,--location 跟随重定向。但200状态仍可能是登录页,跟随重定向也不保证最终站点是你想要的发布方。

2. 核对这三项,再看源码

head -n 12 ./tool.headers
head -n 5 ./tool.sh
less ./tool.sh

在 less 中按 q 退出。重定向时,头文件可能包含多段响应,要结合命令最后打印的最终地址与状态判断。

结果 怎样处理
404、403等错误 回到原发布页核对地址或访问条件,不执行残留文件
200,但正文是 HTML 可能是展示页、登录页或验证页,查原发布者提供的直接文件入口
最终域名和原预期不同 先确认分发关系,不把跳转自动当成可信授权
内容是脚本 继续查看它要改什么、需要什么权限,核对用途后再运行

Content-Type 是线索,不是安全鉴定。真正的脚本也可能被服务器作为普通文本或二进制流发送。

3. 用已确认的文件做语法检查

确认文件来源与用途后,Bash 脚本可先检查语法:

bash -n ./tool.sh

语法通过只说明 Bash 能解析它,不能证明脚本安全。以这里的 DNS 检查工具为例,核对内容后才运行:

bash ./tool.sh localhost

localhost 是本机检查,不证明外部 DNS 正常。详细结果见域名解析脚本教程。下载别的脚本时不要照搬这个参数。

为什么 --fail 没挡住那个网页?

因为有些错误页面或登录页也返回200。必须同时核对状态、最终地址和内容。HTTP200只说明服务器给出成功状态,不会替你检查内容是不是脚本。404或网络中断后也可能存在旧文件或部分文件;命令失败后不要继续执行它。

检查结束后,可删除你自己新建的头文件和临时副本;不要用模糊通配符删除目录。本站工具的固定下载地址不要求登录,但这不代表所有第三方下载页也一样。

参考资料

  • curl 使用手册 · 资料日期 2026-10-22