Linux用的SHELL脚本问题,麻烦高手们救小弟于水深火热之中啊!

#!/bin/sh
while true; do
ping -w 5 -c 1 192.168.1.1 >/dev/null 2>&1

if [ $? -eq 0 ]; then
shutdown -c
ping -w 5 -c 1 192.168.1.2 >/dev/null 2>&1

if [ $? -eq 0 ]; then
shutdown -c
ping -w 5 -c 1 192.168.1.3 >/dev/null 2&1

if [ $? -eq 0 ]; then
shutdown -c
sleep 180
fi
fi
else
shutdown -h +5
continue
fi

sleep 3
done

麻烦帮我检验一下这个脚本是否有错误。暂时发现其中任意一个IP不通,系统就关机了!
另外,我要用这个脚本达到的效果是,当三个IP都PING不通的情况下系统在延迟5分钟后关机;在延迟5分钟关机时间内如果又有IP通了,那就取消关机命令,继续循环检测下去。并做到每检测一遍没有问题的情况下脚本休眠3分钟后再检测!
小弟新手一个,没有悬赏金了,实在不好意思,还请高手们不灵赐教,小弟感激涕零啊!
最新回答
无心

2024-10-02 00:56:34

#!/bin/sh

function pings() {
ping $1
return $?
}

#检测是否全部ping通或全部不通
function check_stat() {
list=$1
for i in ${list[*]}; do
if [ $i -ne $2 ]; then
return 1
fi
done
return 0
}

stats=(2 2 2) #保存ping每个连接结果的数组

A="192.168.1.40"
B="192.168.1.36"
C="192.168.1.23"

target=$A

while true; do
pings $target
if [ $? -ne 0 ]; then
echo "ping $target error"
case $target in
$A)
target=$B
stats[0]=1;;
$B)
target=$C
stats[1]=1;;
$C)
target=$A
stats[2]=1;;
esac
else
echo "ping $target ok"
case $target in
$A)
target=$B
stats[0]=0;;
$B)
target=$C
stats[1]=0;;
$C)
target=$A
stats[2]=0;;
esac
# shutdown -c #ping成功其中一个则取消关机
echo "shutdown cancled"
fi
echo "Connections' stat: ${stats[*]}"

if check_stat $l 0; then #如果ping都成功
echo "All connection is ok."
# sleep 3
else
echo "Some Target error."
fi
if check_stat $l 1; then #如果ping都失败
echo "All connection error. Shutdown system."
# shutdown -h +5
else
echo "Some connection error."
fi
done

菜鸟水平,仅供参考