如何编写命令失败自动切换备选的公网IP获取Bash脚本
Bash 单命令失败自动执行备选命令实现
核心逻辑
Bash 中所有命令执行完成后都会返回0~255的退出状态码:返回0代表执行成功,非0代表执行失败。配合 Bash 自带的||短路运算符即可实现「前序命令失败才执行后续命令」的需求。
针对获取公网IP场景的最简用法
直接在终端执行即可:
curl -s www.ifconfig.me || curl -s http://icanhazip.com
参数说明:
-s为curl的静默模式参数,会屏蔽进度条、错误提示等冗余输出,仅返回接口的响应内容。
可复用脚本版本
可以将逻辑封装为独立脚本,方便后续调用:
#!/bin/bash # 尝试第一个IP获取源 public_ip=$(curl -s --connect-timeout 3 www.ifconfig.me) # 第一个源失败时尝试备选源 if [ -z "$public_ip" ]; then public_ip=$(curl -s --connect-timeout 3 http://icanhazip.com) fi # 输出最终结果 echo "当前公网IP为:$public_ip"
脚本说明
- 额外增加了
--connect-timeout 3参数,避免单站点不通时长时间等待,3秒无响应就判定为失败 - 支持后续扩展更多备选源,只要在判断逻辑后追加对应命令即可
- 最终获取的IP存储在
public_ip变量中,可直接用于后续其他业务逻辑
内容的提问来源于stack exchange,提问作者Adinath Dhamdhere
相关产品推荐
相关产品推荐

