Swisslinux.org

− The GNU/Linux crossroads in Switzerland −

 

Language

 

The Forum

You are not logged in.

#1 14 Mar 2006 09:05:34

Fr3nChY
Affranchi(e)
 
Registered: 14 Mar 2006
Posts: 5

[BASH] Récupérer une valeur de retour

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

Offline

 

#2 14 Mar 2006 12:48:11

BOFH
Admin
From: Ecublens, VD
Registered: 03 Feb 2005
Posts: 862
Website

Re: [BASH] Récupérer une valeur de retour

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)

Offline

 

#3 14 Mar 2006 13:12:21

Fr3nChY
Affranchi(e)
 
Registered: 14 Mar 2006
Posts: 5

Re: [BASH] Récupérer une valeur de retour

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? yikes
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

+

Offline

 

#4 15 Mar 2006 14:10:26

Fr3nChY
Affranchi(e)
 
Registered: 14 Mar 2006
Posts: 5

Re: [BASH] Récupérer une valeur de retour

Me revoila yikes

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 big_smile

Offline

 

#5 15 Mar 2006 22:32:45

[GO]Skywalker13
Modérateur
From: Choëx (VS)
Registered: 05 Oct 2004
Posts: 890
Website

Re: [BASH] Récupérer une valeur de retour

Pour le $? ca marche ainsi :

Code:

/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


Mathieu SCHROETER
log.schroetersa.ch

Offline

 

#6 17 Mar 2006 08:56:11

Fr3nChY
Affranchi(e)
 
Registered: 14 Mar 2006
Posts: 5

Re: [BASH] Récupérer une valeur de retour

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?

smile

Offline

 

#7 20 Mar 2006 14:20:13

Fr3nChY
Affranchi(e)
 
Registered: 14 Mar 2006
Posts: 5

Re: [BASH] Récupérer une valeur de retour

up!

personne n'aurait une idée svp sad

Offline

 

#8 21 Mar 2006 09:02:31

BOFH
Admin
From: Ecublens, VD
Registered: 03 Feb 2005
Posts: 862
Website

Re: [BASH] Récupérer une valeur de retour

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:

Code:

/bin/bash -x script.sh

Il affichera chaque commande avant de l'exécuter, ce qui te permettra de mieux voir ou ca coince.

+

Offline

 

Board footer

Powered by FluxBB