shell Ping测试If-else用例

tjrkku2a  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(121)

我想在Shell脚本中根据ping测试显示“Unit 1 is online”或“Unit 1 is offline”。但是,我找不到一个标志或方法来从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
dzjeubhm

dzjeubhm1#

如果您使用的是标准的GNU/Linux ping工具,则the manual states
如果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"
xu3bshqb

xu3bshqb2#

也许这可以帮助你,处理你的东西。在下面的例子中,我正在执行一个系统的重新启动,如果目标是不可达的。

#!/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
fi

相关问题