Bash脚本执行wget时URL嵌入用户输入变量的写法求助
脚本错误点
- 核心语法错误:Bash变量赋值时
=两侧严禁加空格,你写的URL= "https://gz.blockchair.com/ethereum/blocks/"会被解析为「临时设置环境变量URL为空,执行后面的URL字符串作为命令」,运行直接报command not found。 - 通配符逻辑错误:双引号包裹范围内的
*会被识别为普通星号字符,不会做通配匹配;且wget本身不支持直接在URL路径中写*匹配远程服务器文件,直接写会返回404。 - 隐性匹配错误:Blockchair的文件命名中月份固定为两位格式(比如1月对应
01),如果输入单数字月份(比如输入1)会匹配不到资源。
紧急修复可直接运行版本
距离交付只剩20分钟直接全量替换你的脚本内容即可,不需要额外调整:
read -r -p "Month?(输入1-12数字): " month read -r -p "Year?(输入四位年份如2024): " year # 自动给单数字月份补前导零,适配文件命名规则 printf -v month "%02d" "$month" URL="https://gz.blockchair.com/ethereum/blocks/" wget -w 2 --limit-rate=20k -r -np -nH --cut-dirs=3 -A "blockchair_ethereum_blocks_${year}${month}*.tsv.gz" "$URL" exit
新增wget参数说明(不用修改,直接用即可)
-r:开启递归遍历目录,支持批量匹配符合规则的文件-np:禁止向上遍历父目录,不会爬取无关路径的内容-nH --cut-dirs=3:取消自动创建的多层嵌套目录,文件直接保存在当前执行脚本的文件夹下-A:指定文件名白名单,仅下载文件名匹配对应年月规则的.tsv.gz压缩包,不会拉取无关资源
内容的提问来源于stack exchange,提问作者nyetrying
相关产品推荐
相关产品推荐

