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

Shell脚本新手求助:从列表文件用curl批量获取网页HTTP状态码

帮你修正并优化Shell脚本~

嘿,作为Shell新手碰到这种小问题很正常,我帮你梳理下原脚本的问题,再给你一个更可靠的版本:

原脚本的几个核心问题

  • 读取CSV的方式错误:read -ra arr_values <<< $(head -n 999 web.csv)会把所有行的内容按空格拆分到数组里,如果你的web.csv是每行一个网站,这个操作会把换行符当成空格,导致数组里的元素可能不是完整的网址(比如带路径的网址会被拆碎)。
  • 变量未加引号:curl里的$s没加双引号,要是网址里有&、空格这类特殊字符,Shell会直接解析出错。
  • 语法不完整:if语句最后没有闭合的fi,运行时会直接报错。
  • 输出无上下文:只打印OK/Er...,你根本不知道对应哪个网站出了问题。

修正后的完整脚本

#!/bin/bash

# 逐行读取web.csv的前999行,每行对应一个网站
while IFS= read -r site; do
    # 跳过空行,避免无效的curl请求
    [[ -z "$site" ]] && continue

    # 执行curl获取HTTP状态码,给site加双引号确保特殊字符被正确处理
    # 可以加--max-time 10设置超时时间,避免卡住
    res=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$site")

    # 判断状态码,同时输出网站名称和具体状态码,方便排查
    if [[ "$res" == "200" || "$res" == "302" ]]; then
        echo "$site - OK (状态码: $res)"
    else
        echo "$site - 异常 (状态码: $res)"
    fi
done < <(head -n 999 web.csv)

关键修改点说明

  1. 用while read循环读取每行:IFS= read -r site可以完美保留每行的原始内容,不会截断开头空格,也不会转义反斜杠。
  2. 跳过空行:避免CSV里的空行触发无效的curl请求。
  3. 安全引用变量:"$site"确保带特殊字符的网址能被curl正确识别。
  4. 更清晰的输出:同时打印网站地址和状态码,一眼就能看出哪个站点有问题。
  5. 可选超时设置:--max-time 10让curl在10秒后自动超时,避免脚本被某个卡住的请求拖死。

额外小建议

  • 如果你的网站都是HTTPS,碰到证书验证失败的情况,可以临时加-k参数忽略证书(生产环境不推荐)。
  • 如果需要把结果保存到文件,直接在脚本最后加>> result.log即可:done < <(head -n 999 web.csv) >> result.log

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:22:14