Shell脚本参数未接收:DynU公网IP更新脚本问题排查
问题排查与修复
错误分析
- 变量赋值方式错误:你当前的
myip=wget -O - v4.ident.me 2>/dev/null && echo写法完全错误。Shell会把myip赋值为字符串wget,然后单独执行后面的命令,导致$myip根本没拿到公网IP。要捕获命令输出给变量,必须用命令替换。 - URL格式错误:DynU的API URL被拆成两行,换行符会被嵌入URL中,导致请求被服务端判定为无效。
修复后的完整脚本
#!/bin/bash # 用命令替换捕获公网IP myip=$(wget -O - v4.ident.me 2>/dev/null) echo "当前公网IP: $myip" # 确保URL为单行,避免换行符干扰 wget "http://api.dynu.com/nic/update?myip=$myip&username=my-username-comes-here&password=my-pwd-comes-here"
可选优化(增强稳定性)
如果网络波动导致IP获取失败,$myip会是空值,此时发送请求毫无意义,可以加个判断逻辑:
#!/bin/bash myip=$(wget -O - v4.ident.me 2>/dev/null) if [ -z "$myip" ]; then echo "错误:无法获取公网IP" exit 1 fi echo "当前公网IP: $myip" wget "http://api.dynu.com/nic/update?myip=$myip&username=my-username-comes-here&password=my-pwd-comes-here"
内容的提问来源于stack exchange,提问作者Pedro Santangelo
相关产品推荐
相关产品推荐

