if abfrage kürzen, liefert aber falsches ergebnis

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
ren22

if abfrage kürzen, liefert aber falsches ergebnis

Beitrag von ren22 » 30.09.2015 23:14:14

hallo,
ich verstehe nicht warum ich, wenn ich die if abfrage kürzen möchte, dass ich dann "IPv4 is down" bekomme, kann mir jemand das mal bitte erklären.

Code: Alles auswählen

#/bin/bash

if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
  echo "IPv4 is up"
else
  echo "IPv4 is down"
fi

[ $(ping -q -c 1 -W 1 8.8.8.8 >/dev/null) ] && echo "IPv4 is up" || echo "IPv4 is down"
./ifpingtest.sh
IPv4 is up
IPv4 is down

das letzte Ergebnis liefert mir nicht "IPv4 is up" zurück, warum ????

Danke

Benutzeravatar
heisenberg
Beiträge: 4125
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: if abfrage kürzen, liefert aber falsches ergebnis

Beitrag von heisenberg » 30.09.2015 23:21:27

Code: Alles auswählen

[ "$var" ] && then-befehl || else-befehl 
Dieses Konstrukt liefert true, wenn $var nicht leer ist.
[ $(ping -q -c 1 -W 1 8.8.8.8 >/dev/null) ] && echo "IPv4 is up" || echo "IPv4 is down"
Da Du die Ausgabe nach /dev/null umlenkst, ist dein Wert immer leer. :)

Das, was Du willst, ist den Exit-Code von ping auswerten und nicht die Ausgabe. Also...

Code: Alles auswählen

ping -q -c 1 -W 1 8.8.8.8 >/dev/null && echo "IPv4 is up" || echo "IPv4 is down"

TomL

Re: if abfrage kürzen, liefert aber falsches ergebnis

Beitrag von TomL » 30.09.2015 23:34:55

ren22 hat geschrieben:

Code: Alles auswählen

[ $(ping -q -c 1 -W 1 8.8.8.8 >/dev/null) ] && echo "IPv4 is up" || echo "IPv4 is down"

Code: Alles auswählen

thomas@thomaspc ~ $ ping 12.10.1.2 -c 1 -w 1 >/dev/null; [ $? = 0 ] && echo on || echo off
off
thomas@thomaspc ~ $ ping 10.10.1.2 -c 1 -w 1 >/dev/null; [ $? = 0 ] && echo on || echo off
on

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: if abfrage kürzen, liefert aber falsches ergebnis

Beitrag von Meillo » 01.10.2015 06:01:04

TomL hat geschrieben:

Code: Alles auswählen

thomas@thomaspc ~ $ ping 12.10.1.2 -c 1 -w 1 >/dev/null; [ $? = 0 ] && echo on || echo off
off
thomas@thomaspc ~ $ ping 10.10.1.2 -c 1 -w 1 >/dev/null; [ $? = 0 ] && echo on || echo off
on
Das liefert zwar das korrekte Ergebnis, ist aber unnoetig doppelt gemoppelt. Entscheidend zum Verstaendnis ist, dass das test(1) Kommando nichts anderes ist als jedes andere Kommando. Ueber diesen Weg kommt man dann zu heisenbergs Variante.
Use ed once in a while!

Antworten