2016-04-13 4 views
-1

Ich muss sicher sein, dass 2 Maschinen funktionieren und 1 Maschine schläft, um meinen Befehl auszuführen. Hier ist die Logik:Wie schreibe ich ein Skript mit mehreren Pings als Bedingung, um einen Befehl auszuführen?

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

Ich weiß, dass die Syntax ist schlecht, weil ich weiß nicht, was habe ich in den [] schreiben?

Antwort

3

Shell-Befehle haben einen Rückkehrstatus, der durch $? zugänglich ist, ping gibt 0 zurück, wenn es erfolgreich war, und etwas anderes stattdessen, also könnten wir das genauso gut testen.

Wir können den Status auf diese Weise abrufen:

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

wo -c 1 Ping nur senden eine Anfrage erzählen.

Dann können wir die Werte mit Hilfe der numerischen Vergleichstest:

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

By the way, würde ich Ihre Tests in dieser Form Faktor:

if ping1 && ping2 then 
    if ping3 then 

    else #(if ! ping3) 

    fi 
fi 
Verwandte Themen