Vous n'êtes pas identifié.
Tout d'abord bonjour.
Je suis un petit nouveau avec un (très?) mauvais niveau en code. :?
Voila je vais vous expliquer mon problème.
J'ai commencé un script en bash qui va prendre des numeros de telephone qui se trouve dans un tableau et les composés.
Jusqu'a la pas de probleme.
Je compose le numero par cette ligne:
/usr/sbin/pppd connect "/usr/sbin/chat -v '' ATZ OK ATDT,${tel[$i]} CONNECT ''" /dev/ttyS0 38400 &
Mais j'aimerais qu'elle me renvoie quelque chose comme un 1 ou 0 pour savoir si la connexion a marché ou pas.
J'ai besoin de cette etat pour la suite du script.
Si la connexion a marché alors je continue
Si la connexion n'a pas marché alors je prend un autre numéro.
J'ai essayé ceci:
#--- Fonction qui passe les appels ---
for (( i=0; i < nb; i++ ))
do
echo Connexion vers... ${tel[$i]}
con=`/usr/sbin/pppd connect "/usr/sbin/chat -v '' ATZ OK ATDT,${tel[$i]} CONNECT ''" /dev/ttyS0 38400`
sleep 50
echo $con
done
Mais biensur cela ne fonctionne pas.
J'ai egalement essayé ceci:
#--- Fonction qui passe les appels ---
for (( i=0; i < nb; i++ ))
do
echo Connexion vers... ${tel[$i]}
/usr/sbin/pppd connect "/usr/sbin/chat -v '' ATZ OK ATDT,${tel[$i]} CONNECT ''" /dev/ttyS0 38400 &
sleep 40
ping -c 1 192.168.0.9 > etat_connexion.txt
done
Et ensuite ouvrir le fichier etat_connexion.txt et comme le ping renvoie errors lorsqu'il y a une erreur faire un test pour voir si ce mot est présent ou pas... Mais je sais pas si c'est possible et comment faire.
Merci de m'aider si vous y arrivez.
:p
Hors ligne
Hello,
Tu peux récupérer le code d'erreur du dernier sous-processus invoqué (ici pppd) dans la variable $? (la signification des différents codes est détaillée dans la man page de pppd, mais en gros 0=réussi). Par contre, ceci ne fonctionne que si le sous processus est invoqué de manière synchrone, donc sans le & a la fin.
Maintenant, je ne comprends pas pourquoi tu utilises le & pour lancer pppd, vu que de toute façon tu n'utilises qu'un seul port série, donc tu ne peux pas lancer plusieurs pppd en même temps. Mais si tu dois absolument les lancer en background avec &, a ce moment la tu dois stocker les PIDs de chaque sous-processus quelque part (le PID du dernier sous-process lancé est disponible dans la variable $!). Pour récupérer par après le code de retour, il faut appeler wait suivi du PID du processus concerné.
PS: le wardialing c'est pas bien (tm)
Hors ligne
Wahou j'ai pas tout compris!
Il faut savoir que je decouvre totalement linux et le bash je n'ai aucune connaissance. (c'est un projet)
Je fais enormement de recherche (Alleluya Google)
J'avais trouver pour le $? c'est ce que j'ai fait mais j'ai recuperer la reponse du ping et je continue selon cette reponse.
C'est quoi le wardialing?
J'ai juste mis le & pour que la numerotation ne bloque pas la console.
Merci de ta reponse, je vais voir comment se passe la suite et si j'ai encore des problemes j''hesiterais pas a poster. :p
Mais d'abord google 8D
+
Hors ligne
Me revoila
J"ai chercher ce qu'est le wardialing et c'est pas mon but hein :p
Sinon j'ai un autre probleme.
Des que la connexion échoue la console se ferme et le script aussi, il ne veut pas sortir de la boucle pour prendre le prochain numero.
Quelqu'un s'aurait comment faire pour que lors d'une erreur le script ne s'arrete pas et continue.
Merci
Hors ligne
Pour le $? ca marche ainsi :
/usr/sbin/pppd connect "/usr/sbin/chat -v '' ATZ OK ATDT,${tel[$i]} CONNECT ''" /dev/ttyS0 38400 if [ $? = 0 ]; then ... fi
et ça devrait bien retourner la valeur de pppd et non d'autre chose
Hors ligne
Oui ca renvoie la valeur mais ca renvoie la valeur de la fonction.
Donc si la compositon s'est faite alors c'est bon.
La composition s'est faite: ok mais la connexion pas obligatoirement.
C'est pour ca que je passe d'abord par un ping qui ping l'ip que j'ai forcé et donc s'il repond la je peux dire que c'est bon.
Mon probleme n'est pas la, car des que la composition a echouer tout le script plante.
Est ce qu'il n'y aurait pas quelque du style "try > catch" en bash?
Hors ligne
up!
personne n'aurait une idée svp
Hors ligne
Tout le script plante ? normalement, une commande ratée n'interromp pas l'exécution du script parent... il nous faudrait le script entier pour y voir plus clair je crois.
Sinon, tu peux essayer de le faire tourner en mode debug:
/bin/bash -x script.sh
Il affichera chaque commande avant de l'exécuter, ce qui te permettra de mieux voir ou ca coince.
+
Hors ligne