ensuite, pour ton erreur integer …, tout simplement une de tes variables n’est pas un chiffre, mais un lettre ou une chaine vide … comme je le vois ici (chez moi) :
Merci pour votre réponse, mais je m’en sors pas…
Est-ce que vous pouvez me modifier ce script pour qu’il fontionne?
J’ai Firestarter comme firewall avec une connection en wifi eth2 et une connection filiaire eth1. Mais il pose quelques problèmes pour lancer le wifi.
(seulement le wifi!)
Au démarage de la session il affiche un message d’erreur en disant que la carte eth2 n’est pas disponible . Ceci est compréhensible car il se lance en même temps que la connexion au réseau et la connexion n’a pas le temps de s’établir. Voilà pourquoi ce « script ».
bonjour,
non mais qu’est ce que tu voulais récupérer avec ton grep de tout à l’heure là ?
et puis, normalement le wifi, c’est pas une carte ethernet, donc c’est pas une interface ethX, c’est peut-être pas un détail anodin ?? (c’est une interface wlanX normalement non ?).
Alors voilà, grep récupère le nombre d’octets reçus sur eth1 ou eth2.
Firestarter ne démarre pas tant que la carte réseau n’a pas reçus 900 octets ou que le compteur n’est pas fini.
Puis si la boucle est finie avant la fin du compteur alors firestarter est lancer dans la barre des tâches…
Sinon mon wifi, Intel Pro 3945abg détecté à l’installation avec Debian etch, est bien sur eth2 et marche bien.
[quote=“eric.loiseaux”]Sinon mon wifi, Intel Pro 3945abg détecté à l’installation avec Debian etch, est bien sur eth2 et marche bien. [/quote]okay oui, tu dois avoir raison, j’ai plus de wifi, je sais plus bien …
bon pour ton script, il y a plusieurs ennui, d’abord tu vas boucler 100 000 en lançant les commandes ifconfig, de quoi plier ton cpu, y rigole non ?
Au niveau du concept, c’est douteux, donc pourquoi pas faire un sleep ?
Je suppose que tu le lances en tâche de fond ton script ? (&)
Alors pour ton problème, tu testes donc une chaine qui peut être soit :
“”
xxx (octets)
Le problème c’est que tu ne la teste pas comme on teste les chaines, mais comme on teste les chiffres (en bash => opérateurs -lt -gt -ge -le ).
Envoyer une chaine vide dans ce test, c’est l’erreur assurée, et quand ton script démarre, j’imagine que tes interfaces n’ont reçu que nada octets !
(donc pas de ligne avec le mot octet).
je ferai donc un truc du style :
[code]#! /bin/bash
declare -i verif=0
declare -i verif1=0
declare bool=0 # 0 est équivalent à true, en bash
while bool;do
grep renvoie vrai s’il trouve une correspondance :
if[ $(ifconfig eth2 | grep Octets &>/dev/null) && $(ifconfig eth1 | grep Octets &>/dev/null) ]; then
# c’est pas suffisant car il faut être sûr que tes cut vont récupérer que des chiffres
verif=$(ifconfig eth2 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
verif1=$(ifconfig eth1 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
fi
là on a normalement deux entiers à tester !
pas besoin de guillemets pour tester des entiers
if [ $verif -ge 900 ] && [ $verif1 -ge 900 ]; then
bool=1 # ah ben si c’est bon on demande à sortir de while
else sleep 1 # sinon on roupille une seconde pour laisser les autres process exister
fi
done
sudo firestarter --start-hidden # à voir si avec cette ligne il se lance en tâche de fond !
exit 0 [/code]
Oui tu as raison, c’est peut-être pas la bonne syntaxe, à vue de nez, et aprés quelques tests, faisons plutôt comme ça (oublions le code précédent, j’ai mieux je crois) :
# on déclare deux entiers initialisés à 0
declare -i verif=0
declare -i verif1=0
# on sauvegarde les flux stdin et stdout dans des pointeurs bidons
exec 3>&1
exec 4>&2
# on envoie &1 et &2 (je pense pas &3 et &4) à la poubelle
exec &>/dev/null # comme ça toutes les commandes font leurs job en silence
# on boucle en infini
while :; do
# grep renvoie vrai s'il trouve une correspondance :
if test $(ifconfig eth2 | grep Octets ) && test $(ifconfig eth1 | grep Octets ); then
# c'est pas suffisant car il faut être sûr que tes cut vont récupérer que des chiffres
verif=$(ifconfig eth2 | grep Octets | cut -d: -f2 | cut -d' ' -f1)
verif1=$(ifconfig eth1 | grep Octets | cut -d: -f2 | cut -d' ' -f1)
fi
# là on a normalement deux entiers à tester !
# pas besoin de guillemets pour tester des entiers
if [ $verif -ge 900 ] && [ $verif1 -ge 900 ]; then
break # on casse la boucle si c'est bon
else sleep 1 # sinon on roupille une seconde pour laisser les autres process exister
fi
done
sudo firestarter --start-hidden # à voir si avec cette ligne il se lance en tâche de fond !
# on rétablit les flux stdin et out avant d''exiter' et on détruit &3 et &4
exec 1>&3 3>&-
exec 2>&4 4>&-
exit 0 # bye
EDIT
non non, erreur, on ne peut pas tester la sortie de $(ifconfig eth2 | grep Octets ) (là c’est la sortie, nous ce qu’on veut, c’est le code de sortie: erreur ou ok, 1 ou 0).
Donc on fait comme ça :
[code]# on déclare deux entiers initialisés à 0
declare -i verif=0
declare -i verif1=0
on boucle en infini
while :; do
grep renvoie vrai s’il trouve une correspondance :
if test $(ifconfig eth2 | grep Octets &>/dev/null)
&& test $(ifconfig eth1 | grep Octets &>/dev/null); then
# c’est pas suffisant car il faut être sûr que tes cut vont récupérer que des chiffres
verif=$(ifconfig eth2 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
verif1=$(ifconfig eth1 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
fi
là on a normalement deux entiers à tester !
pas besoin de guillemets pour tester des entiers
if [ $verif -ge 900 ] && [ $verif1 -ge 900 ]; then
break # on casse la boucle si c’est bon
else sleep 1 # sinon on roupille une seconde pour laisser les autres process exister
fi
done
sudo firestarter --start-hidden # à voir si avec cette ligne il se lance en tâche de fond !
exit 0 # bye
[/code]
tu as vu que tu le démarre en caché hein ? donc pas dans la barre des tâche s je crois …
non c’est bien ça aussi, si ça te suffit …
par contre ça serait bien de savoir ce qui ne marche pas … alors peux tu prendre le dernier code que je t’ai donné, tu remplace la première ligne du script par : #!/bin/bash
set -x
et la dernière par
set +x
exit 0
puis tu te place (cd) où est ton script, et tu le lances :
si tu vois que ça boucle , tu le fini avec un Ctrl + C, et tu postes ce que tu as reçu en console, ok ?