如何编写具有多个 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
我需要确保 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