正在寻找一些在OpenWRT上编写bash脚本的非常有用的帮助。我希望脚本检查OpenVPN连接的ping响应时间,并且响应时间(以毫秒为单位)是否超过某个阈值,然后执行诸如更改配置文件以连接到其他OpenVPN服务器的操作。我将通过OpenWRT防火墙上的crontab设置脚本。
到目前为止,我已经制定了命令以获取查询所需的毫秒形式的ping结果。
ping -c 1 1.1.1.1 | awk 'FNR == 2 { print $(NF-1) }' | cut -d'=' -f2
这将对IP地址(在本例中为Cloudfare DNS)执行ping操作,并将ping ms时间打印到屏幕上。
我也可以修改此命令以将值写入文件,而不是使用stdbuf
ping -c 1 1.1.1.1 | awk 'FNR == 2 { print $(NF-1) }' | stdbuf -o0 cut -d'=' -f2 > pingms
我需要一些帮助,然后通过stdout将此值或输出到文本文件,如果该值大于100ms,则执行操作。
例如如果值大于100ms(来自上述命令),则执行其他命令/脚本,否则不执行任何操作
任何帮助将不胜感激。
谢谢
也许是这样。
#!/usr/bin/env sh
if [ $(ping -c 1 1.1.1.1 | awk 'FNR == 2 { print $(NF-1) }' | stdbuf -o0 cut -d'=' -f2 ) -gt 100 ]; then
echo "greater than 100 do something!"
else
echo 'less than 100 nothing to do, bye...'
fi
首先,在OpenWRT上,您将没有BASH
shell,而是具有“限制”的shell,即ash
。同样,stdbuf
通常不是官方版本的一部分,busybox
通常也不是,并且各种shell /体系结构组合对浮点的处理方式也不同,因此,我建议削减该部分以保持脚本体系结构和构建无关。希望以下oneliner可以帮助您。
[ $(ping -c1 1.1.1.1 | awk 'FNR == 2 { print $(NF-1) }' | cut -d'=' -f2 | cut -d'.' -f1) -gt 100 ] && echo "GT 100" || echo "LT 100"