编写Shell脚本:网络异常时自动POST账号密码到指定URL
修正后的网络检测与POST请求Shell脚本
原脚本存在的问题
- 逻辑倒置:需求是网络不通时发送POST请求,但原脚本在ping通(网络正常)时执行请求,逻辑完全相反
- 语法错误:
do={...}是无效的Shell语法,执行命令无需这种包裹方式 - 命令不兼容:
/tool fetch是RouterOS系统的专属命令,普通Linux/Unix Shell环境需用curl或wget这类通用HTTP工具 - 转义字符错误:原脚本中的
&>是HTML转义格式,Shell中应写为&>;POST参数里的&&应改为单个&来分隔参数 - URL冗余:
https://secure.etecsa.net:8443//LoginServlet中的双斜杠可简化为单斜杠
修正后的脚本(curl版本)
#!/bin/sh # 检测网络连通性,ping谷歌DNS 1次,忽略所有输出 if ! ping -c 1 8.8.8.8 &> /dev/null; then # 网络不通时发送POST请求 curl -X POST \ -d "username=myuser&password=mypass" \ "https://secure.etecsa.net:8443/LoginServlet" else # 网络正常时无操作,如需提示可取消下方注释 # echo "网络连接正常" fi
可选wget版本(无curl环境时使用)
#!/bin/sh if ! ping -c 1 8.8.8.8 &> /dev/null; then # 发送POST请求并静默运行,丢弃响应内容 wget --post-data="username=myuser&password=mypass" \ "https://secure.etecsa.net:8443/LoginServlet" \ -q -O /dev/null fi
内容的提问来源于stack exchange,提问作者HDC
相关产品推荐
相关产品推荐

