我想显示“单元1是在线的”或“单元1离线”的基础上的ping测试在Shell脚本。但是,我无法找到从ping测试的输出中提取文本的标志或方法,以便将其与if-case语句一起使用以获得所需的输出。
read -p "Enter the number of Units: " x
for ((i=1; i<=$x; i++))
do
ping -c1 a.b.c."$i"
if ping=success
echo "Unit "$i" is online"
else
echo "Unit "$i" is offline"
fi
done发布于 2020-08-01 18:58:15
如果您使用的是标准的GNU/Linux ping工具,那么手册状态
如果ping完全没有收到任何回复数据包,那么它将使用代码1退出。如果指定了数据包计数和截止日期,并且在截止日期到来之前收到的数据包少于计数数据包,则它也将退出代码1。如果出现其他错误,则退出代码2。否则退出时使用代码0。这样就可以使用退出代码来查看主机是否还活着。
这意味着您可以从shell中的命令中捕获退出代码并打开该命令。为巴什:
if ping -c1 192.168.1."$i" ; then
echo "Unit ${i} is online"
else
echo "Unit ${i} is offline"
fi或者使用||和&&作为一条直线。
ping -c 192.168.1."$i" && echo "Unit ${i} is online" || echo "Unit ${i} is offline"发布于 2022-10-11 19:31:11
也许这能帮你处理你的东西。在下面的示例中,如果无法到达目标,我将执行系统的重新启动。
#!/bin/bash
# Set target host IP or hostname
TARGET_HOST='10.8.0.1'
count=$(ping -c 3 $TARGET_HOST | grep from* | wc -l)
if [ $count -eq 0 ]; then
echo "$(date)" "Target host" $TARGET_HOST "unreachable, Rebooting!" >>/var/log/openvpn_connection_check.log
/sbin/shutdown -r 0
else
echo "$(date) ===-> OK! " >>/var/log/openvpn_connection_check.log
fihttps://stackoverflow.com/questions/63208550
复制相似问题