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

使用wget编写Shell脚本测试URL连通性时遇参数错误求助

问题分析与解决

你遇到的line 6: [: too many arguments错误,核心原因是**[ ](也就是test命令)的用法错误**——[ ]是用来做字符串、数值这类条件判断的,不能直接把grep命令塞进去。if语句本身就可以直接判断命令的退出状态码,不需要借助[ ]。

修复后的基础版本脚本

先把报错的那行改对,就能正常运行了:

#!/bin/bash
# 你的urls.txt里没有"URLs:"行,所以直接读取所有URL到数组即可
urls=( $(cat urls.txt) )

for url in "${urls[@]}"
do
    wget --spider -o wget.log "${url}"
    # 直接用if判断grep的执行结果,去掉多余的[ ]
    if grep -q 'connected' wget.log; then
        echo "${url}: successful"
    else
        echo "${url}: unsuccessful"
    fi
    rm wget.log
done

更简洁可靠的优化版本

其实完全不需要依赖日志里的connected字符串——wget --spider本身会返回对应的退出码:成功连通返回0,失败(无法解析、连接超时等)返回非0。我们可以直接利用这个特性,省去临时日志文件的处理:

#!/bin/bash
urls=( $(cat urls.txt) )

for url in "${urls[@]}"
do
    # -q参数让wget进入安静模式,不输出冗余内容
    if wget --spider -q "${url}"; then
        echo "${url}: successful"
    else
        echo "${url}: unsuccessful"
    fi
done

额外说明

你原来的awk '/URLs:/{y=1;next}y' urls.txt看起来是想提取URLs:之后的内容,但你的urls.txt里并没有这行,所以直接用cat urls.txt读取所有URL就足够了,没必要多此一举。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:18:42