Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/08/2009, à 07:09

Solaris974

[BASH] Timeout "manuel" pour saut de boucle for avec continue

Bonjour tout l'monde!!

Donc voici mon script, résumé, il scanne le réseau et m'affiche le nom et l'ip de chaque ordi.
Il est simplifié pour faciliter la lecture :

#!/bin/bash
IP="192.168.1."
debut=1
fin=5

for ((i=$debut ; i<=$fin ; i++)); do {
#fping -r 0 -n $IP$i | awk -v IP=$IP -v i=$i -F '.' '{gsub(" is alive","")}
#{if ($0 ~ /unreachable/) {} 
#else {{if ($0 ~ /[0-9]?[0-9]?[0-9]\.[0-9]?[0-9]?[0-9]\.[0-9]?[0-9]?[0-9]\.[0-9]?[0-9]?[0-9]/)
#{print IP i" --> "$0; print IP i" --> "$0 >> "scanip"} 
#else {{if (length($1)>9) {print IP i" --> "$1"\t Domain : "$2"."$3"."$4; print IP i" --> "$1"\t Domain : "$2"."$3"."$4 >> "scanip"} 
#else {print IP i" --> "$1"\t\t Domain : "$2"."$3"."$4; print IP i" --> "$1"\t\t Domain : "$2"."$3"."$4 >> "scanip"}}}}}}'

buffer=`fping -r 0 -n $IP$i` & sleep 0.3s; if ($buffer == "") { continue } fi
} done

Mon problème est que la commande fping peu prendre 2 ou 3 secondes à s'exécuter sur une IP qui n'est pas attribuée, et que 2, 3 secondes fois 255 ca fait beaucoup ! roll
Je ne sais pas pourquoi, mais l'option pour régler le timeout de la commande ne fonctionne pas, donc j'aimerai en faire un manuel (le but de ce topic! ^^)

Donc j'ai pensé à ca pour faire un timeout de 300ms, et si la variable "buffer" est vide au bout de ce temps, on passe à la prochaine occurrence de la boucle for:

buffer=`fping -r 0 -n $IP$i` & sleep 0.3s; if ($buffer == "") { continue } fi

Evidement ca ne marche pas trop..

Vous avez des idées ??
Merci !:D


« La Terre est le berceau de l'humanité... Mais passe-t-on sa vie entière dans un berceau ? »

Quad-core i5 3,4Ghz  / 16Go DDR3  /  nVidia GTX 660 2Go OC  /  SSD OCZ Agility 4 256Go

Hors ligne

#2 Le 13/08/2009, à 11:45

iuchiban

Re : [BASH] Timeout "manuel" pour saut de boucle for avec continue

Salut,

Tu devrais plutôt utiliser les threads.
En lancant chacun de tes tests dans un thread différent, tu n'es pas obligé d'attendre le retour d'un ping pour afficher le suivant.

Tu peux stocker les retour dans un fichier avant de les réafficher ordonnés.

Sinon, pour ton problème de timeout, je vois pas big_smile


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#3 Le 13/08/2009, à 12:27

Solaris974

Re : [BASH] Timeout "manuel" pour saut de boucle for avec continue

slt! merci mais...  des threads en ScriptingBash ??
ca existe pas il me semble..  si ce n'est l'utilisation de la commande « & »


« La Terre est le berceau de l'humanité... Mais passe-t-on sa vie entière dans un berceau ? »

Quad-core i5 3,4Ghz  / 16Go DDR3  /  nVidia GTX 660 2Go OC  /  SSD OCZ Agility 4 256Go

Hors ligne

#4 Le 13/08/2009, à 13:20

iuchiban

Re : [BASH] Timeout "manuel" pour saut de boucle for avec continue

En cherchant script shell thread, je suis tombé sur ça :

http://forum.hardware.fr/hfr/OSAlternatifs/script-traitements-parallelles-sujet_55807_1.htm


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne