请求编写带重试的单行Bash脚本:循环调用API直至返回200
单行Bash脚本实现方案
下面是满足需求的单行脚本,每分钟尝试一次API调用,最多10分钟,直到返回200状态码:
for i in {1..10}; do if wget --spider --quiet https://somedomain.com/api/up; then echo "API调用成功(返回200)"; break; else echo "第$i次尝试失败,等待1分钟"; sleep 60; fi done
针对你的两个困惑点的说明
1. 如何判断wget返回200状态码
wget --spider是专门用来检查URL可用性的模式,它不会下载文件,只发送请求并检查响应状态:
- 当目标URL返回200类成功状态码时,wget的退出码为
0,if语句会判定为真,执行成功逻辑并跳出循环 - 如果返回非200状态码(如4xx、5xx)或连接失败,wget退出码非
0,if判定为假,进入等待重试逻辑
如果需要精准匹配200(而非所有2xx),可以用以下方式捕获HTTP状态码:
for i in {1..10}; do STATUS=$(wget --server-response --spider --quiet https://somedomain.com/api/up 2>&1 | awk '/HTTP\// {print $2}'); if [ "$STATUS" = "200" ]; then echo "API返回200,成功"; break; else echo "第$i次尝试失败,状态码$STATUS,等待1分钟"; sleep 60; fi done
2. 整合为单行语句的技巧
Bash允许用分号;分隔不同的命令/代码块,把循环、条件判断、sleep等逻辑按顺序用分号连接,就能写成单行脚本:
- 循环体内部的
if-else结构,用;分隔if条件、then后的命令、else后的命令、fi - 循环的
do和done之间的代码块,同样用分号分隔各部分
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

