Aide pour un script pour firestarter

Bonsoir,

Quand j’exécute ce script pour firestarter, j’ai cet erreur :
line 7: [: : integer expression expected

Pourquoi ?

[code]#! /bin/bash

verif=$(ifconfig eth2 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
verif1=$(ifconfig eth1 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
i=“0”

while [ “$verif” -lt 900 ] && [ “$verif1” -lt 900 ] && [ “$i” -lt 100001 ]; do
verif=$(ifconfig eth2 | grep Octets | cut -d: -f3 | cut -d’ ’ -f1)
verif1=$(ifconfig eth1 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
let $[ i=i+1 ]
done

if [ “$i” -lt 100000 ] ; then
{
sudo firestarter --start-hidden
}
fi

exit 0
[/code]

Pour voir l’utilité de ce script, voir ici:
http://doc.ubuntu-fr.org/firestarter

Merci d’avance

P.S. : Debian Etch AMD64

c’est

donc

les crochets à l intérieur des crochets je suis même pas sur qu’ils soient utiles, faudrait tester sans

Je me souviens plus de la priorité des booléens, je programme très peu.

Merci pour votre réponse mais

pour la version

j’ai l’erreur : line 7: [: too many arguments
et pour cette version

j’ai l’erreur : line 7: [: missing `]’

???

remplaces les && par des -a

Merci mais j’ai aussi les mêmes erreurs

:question: :question: :question:

bonjour,
tu peux utiliser les parenthèse déjà :

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) :

[code]# verif=$(ifconfig eth0 | grep Octets | cut -d: -f2 | cut -d’ ’ -f1)
debian:/home/jcode# echo $verif

debian:/home/jcode# [/code]
Dis plutôt ce que tu cherches à récupérer … parce que là : pas d’ ‘Octets’ dans la chaine renvoyée par ifconfig … :unamused:

Bonjour,

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 ».

Merci d’avance :blush:

Il doit y avoir un script dans /etc/init.d qui configure ton firewall, donne lui une priorité basse.

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 ?).

Bonjour,

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. :smiley:

[quote=“eric.loiseaux”]Sinon mon wifi, Intel Pro 3945abg détecté à l’installation avec Debian etch, est bien sur eth2 et marche bien. :smiley:[/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]

Merci, merci mais votre script me donne cette erreur :

line 9: syntax error near unexpected token then' line 9: if[ $(ifconfig eth2 | grep Octets &>/dev/null) && $(ifconfig eth1 | grep Octets &>/dev/null) ]; then’

C’est vraiment très sympa de m’aider

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 :

tu remplaces donc le test par ceci :wink:

Bon ça ne fonctionne pas encore mais je sens qu’on s’approche :confused:

J’ai pas d’erreurs, mais firestarter ne démarre pas.
J’ai l’impression que ça tourne à l’infini…

On touche au but, mais je vais regarder ça demain matin.

Merci encore et bonne soirée :slightly_smiling:

places ta ligne sudo firestarter aprés les derniers exec, juste avant exit 0 pour voir les erreurs de nouveau … et lance ton script ./tonscript.sh

ça marchera mieux comme ça si ça doit marcher :

[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 …

:cry:
Zut ça ne fonctionne toujours pas… pas d’erreurs non plus…
C’est vraiment difficile.

En attendant, j’ai trouvé une autre solution, mais c’est pas très propre :

[code]#!/bin/sh

ping -c1 www.google.com
Ret=$?

while [ “$Ret” -eq “2” ]
do
sleep 10
ping -c1 www.google.com
Ret=$?

if [ “$Ret” -eq “2” ]; then
ping -c1 195.224.68.226
Ret=$?
fi
done

sudo /usr/bin/firestarter --start-hidden &
exit 0[/code]

Mais bon je préfèrerais l’autre solution.
Qu’est-ce que vous en pensez?

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 ?

Juste une petite precision pour les applications graphique il vaut mieux utiliser gksu, sudo est reserve à la ligne de commande uniquement.

Bonjour, merci pour votre ténacité…
Oui ça boucle:

[quote]# sh start.sh

  • declare -i verif=0
  • declare -i verif1=0
  • :
    ++ ifconfig eth2
    ++ grep Octets
  • test
  • ‘[’ 0 -ge 900 ‘]’
  • sleep 1
  • :
    ++ ifconfig eth2
    ++ grep Octets
  • test
  • ‘[’ 0 -ge 900 ‘]’
  • sleep 1
  • :
    ++ ifconfig eth2
    ++ grep Octets
  • test
  • ‘[’ 0 -ge 900 ‘]’
  • sleep 1
  • :
    [/quote]

Merci aussi à toi Yoshi