如何编写具有多个 ping 的脚本作为 运行 命令的条件?

How to write a script with multiple pings as condition to run a command?

我需要确保 2 台机器正常运行,1 台机器正在休眠 运行 我的命令。这里的逻辑:

#!/bin/bash
ping1=$(192.168.2.15)
ping2=$(192.168.2.15)
ping3=$(192.168.2.21)

if [ $ping1 = OK ] && [ $ping2 = OK ] && [ $ping3 = failure ]
then run_command
elif [ ping1 = OK ] && [ ping2 = OK ] && [ ping3 = OK ]
then echo 'machine 3 already running'
fi

我知道语法不好,因为我不知道我必须在 [ ] 中写什么?

Shell 命令有一个 return 状态,可由 $? 访问,如果成功,ping 将 return 0,而其他东西代替,所以我们不妨对此进行测试。

我们可以这样检索状态:

ping -c 1 192.168.2.15; ping1=$?
ping -c 1 192.168.2.17; ping2=$?
ping -c 1 192.168.2.21; ping3=$?

其中 -c 1 将告诉 ping 只发送一个请求。

然后我们可以使用数值比较来测试这些值:

if [ $ping1 -eq 0 ] && [ $ping2 -eq 0 ] && [ $ping3 -ne 0 ]

顺便说一句,我会将您的测试分解成这种形式:

if ping1 && ping2 then
  if ping3 then

  else #(if ! ping3)

  fi
fi