Bash 脚本的行为出乎意料/奇怪

阿尔法公司

首先,我想为编程、编写脚本等方面的绝对菜鸟而道歉。我正在运行一个 FreeNAS 服务器和一个 Raspberry Pi,我想在其中包含一个 sh 脚本,它应该检查是否有 8 个客户端(IP 地址)在线。如果是,他们应该停止,但如果所有 IP 都离线,它应该执行另一个任务/脚本。

这是我的问题:在互联网上(源代码:https : //www.tech-blogger.net/freenas-automatisch-bei-nicht-benutzung-abschalten/)我找到了一个脚本来检查特定的 IP 以及它们是否处于离线状态应该会自动关机。当我 ping 这些地址时,我得到 100% 的包丢失,这表明它们处于离线状态。但是脚本告诉我至少有一个客户端离线。因为我不是那么笨,所以我认为这与我的代码有关。有谁知道我的脚本出了什么问题?:

HOST1=192.168.1.32
HOST2=192.168.1.33
HOST3=192.168.1.34
HOST4=192.168.1.35
HOST5=192.168.1.36

_exit () {
case $1 in
1) echo „No Shutdown – At least one PC is online“ ;;
2) echo „No PC is online – Shutdown“ ; shutdown -p now ;;
esac
exit $1;
}

#Check if IPs are online
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100.0%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100.0%` -eq 0 ] ; then _exit 1;

#All Clients are offline, shutdown
else
_exit 2
fi
fi

我不是 100% 确定我是否正确解决了您的问题。但我认为你应该尝试替换 || 在你的 if 语句中使用 && 。

|| = 或 && = 和

因此,当所有客户端都关闭时,它只会进入关闭部分。

编辑:

ping -c 1 -i 1 192.168.1.36
PING 192.168.1.36 (192.168.1.36) 56(84) bytes of data.
From 62.155.241.85 icmp_seq=1 Destination Host Unreachable

--- 192.168.1.36 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

这是 100% 的丢包率,而不是100.0%。因此,您检查未发生的事情。

#!/bin/bash

HOST1=192.168.1.32
HOST2=192.168.1.33
HOST3=192.168.1.34
HOST4=192.168.1.35
HOST5=192.168.1.36

_exit () {
case $1 in
1) echo „No Shutdown – At least one PC is online“ ;;
2) echo „No PC is online – Shutdown“ ;; # shutdown -p now ;;
esac
exit $1;
}

#Check if IPs are online
if [ `ping -c 1 -i 1 $HOST1 | grep -wc 100%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST2 | grep -wc 100%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST3 | grep -wc 100%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST4 | grep -wc 100%` -eq 0 ] || [ `ping -c 1 -i 1 $HOST5 | grep -wc 100%` -eq 0 ] ; then _exit 1;

#All Clients are offline, shutdown
else                                                                                                                                                                                           
_exit 2
fi

这按预期工作(在我的机器上)。:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

“ f在这个时候出乎意料”-bash脚本

来自分类Dev

linux bash的sort命令出乎意料的结果

来自分类Dev

CakePHP中的数据验证行为出乎意料

来自分类Dev

光年解析器的行为出乎意料

来自分类Dev

奇怪的bash脚本行为

来自分类Dev

Bash 登录脚本奇怪的行为

来自分类Dev

(net此时出乎意料

来自分类Dev

(此时出乎意料的批次

来自分类Dev

bash脚本中adb pull的奇怪行为

来自分类Dev

具有ng-repeat的过滤器的单选按钮在角度行为方面出乎意料

来自分类Dev

“ Hello,World!”出乎意料的困难

来自分类Dev

R:lubridate返回NA –出乎意料

来自分类Dev

Highcharts热图的出乎意料的结果

来自分类Dev

原型之间共享出乎意料的价值

来自分类Dev

cmd错误:此时goto出乎意料

来自分类Dev

可调节的列数出乎意料

来自分类Dev

杰森出乎意料的角色

来自分类Dev

数据正确,但查询结果出乎意料

来自分类Dev

JUnit异常测试失败(出乎意料)

来自分类Dev

此时,DO出乎意料。错误255

来自分类Dev

结果出乎意料的Modulo项目

来自分类Dev

Metaphone算法出乎意料的结果

来自分类Dev

多态性出乎意料的结果

来自分类Dev

&在这个时候出乎意料

来自分类Dev

简单代码出乎意料的结果

来自分类Dev

这次蝙蝠错误集出乎意料

来自分类Dev

可调节的列数出乎意料

来自分类Dev

图像在此时出乎意料

来自分类Dev

每次都出乎意料的结果