2013-08-07 2 views
0

besoin des yeux supplémentaires pour celui-ci ...variable sh ne fonctionne pas si elle est vide

dns_lookup() { 
    ip_set 
    if [ `ip_ping ${ip_address}` -eq 0 ] 
    then 
      host="" 
      dig +short -x ${ip_address} | sed 's/\.$//g' | while read host 
      do 
        if [ -z "${host}" ] 
        then 
          host="unknown" 
        fi 
        echo "${ip_address},${host}" 
      done 
    fi 

}

j'obtenir les résultats souhaités si ip est pingable et a un nom dns. Je n'obtiens pas de résultats si l'ip est pingable mais n'a pas de nom DNS.


ip_set() { 
     ip_address="${a}.${b}.${c}.${d}" 
} 

ip_ping() { 
    timeout ${delay} ping -q -c 1 -i 1 -W 1 -w 4 $1 > /dev/null 2>&1 ; echo $? 
} 

+0

Que sont 'ip_set' et' ip_ping'? Quelle est la valeur de $ ip_address? Que signifie exactement "ne pas obtenir de résultats"? –

Répondre

0

Vous ne recevez pas un résultat quand il n'y a pas le nom d'hôte parce que votre boucle while read fonctionne jamais quand il n'y a pas de lignes à lire. Vous devez faire votre code d'impression quel que soit exécuté:

host=$(dig +short -x "${ip_address}" | sed 's/\.$//g') 
if [ -z "${host}" ] 
then 
    host="unknown" 
fi 
printf "${ip_address},%s\n" $host 

En outre, vous allez sur votre état de mal. Vous ne devez pas répercuter le statut de sortie et le comparer en tant que texte. Vous devez juste laisser votre état de sortie de commande soit l'état de la sortie de votre fonction:

ip_ping() { 
    timeout ${delay} ping -q -c 1 -i 1 -W 1 -w 4 $1 > /dev/null 2>&1 
    # functions implicitly 'return $?' if you don't specify anything else 
} 

Maintenant, vous pouvez facilement vérifier votre fonction:

if ip_ping "$ip_address" 
then 
    echo "It worked" 
else 
    echo "It failed.." 
fi 
+0

Dans votre exemple, comment l'hôte est-il défini si l'hôte est vrai? Je reçois une liste de tous les hôtes inconnus. – mrlayance

+0

Il y avait un bug, oui. Je l'ai mis à jour. –

+0

Ok, ça marche. Peut-être que je ne me suis pas bien expliqué. Je veux seulement des résultats DNS ou pas si l'IP répond au ping. Je reçois une liste complète. Mon code original vient d'énumérer les ip qui ont répondu à ping. – mrlayance

0

ceci est peut-être ce dont vous avez besoin. Dites-moi si vous avez besoin de révisions. J'aurais aussi suggéré le changement de fonction ip_ping mais that_other_guy l'a déjà fait.

Questions connexes