Pages : 1
#1 Le 12/11/2006, à 11:37
- atlas95
Aide pour script bash
Bonjour,
Je me prend la tete depuis 2j a essayer de faire des script bash mais vu que je n'y connais rien, j'arrive pas a venir exactement au résultat attendu.
Je m'explique:
Je voudrais un script pour connecter et faire toute les manip' pour avoir mon gps bluetooth fonctionnel, c'est à dire:
-une commande "rfcomm connect 4"
-le redemarrage du démon gpsd "/etc/init.d/gpsd restart"
et en faites je voudrais que si je lance le script de connexion 2 fois bah ca me le dise, ca fonctionne mais pas comme il faut, il faudrai se basé que sur des PID mais je me perd, en plus je sais pas trop comment expliquer erf.
Je vous colle les code, j'espere que vous comprendrais
#!/bin/bash
#GPS connect based on HeadsetConnect 1.0 connect by Chrissss
# you need libnotify-bin to run this script
# Enter the bluetooth address of your headset here
RFCOMM=rfcomm4
# Localisation
TITLE="GPS"
CONNECTED="Connexion au GPS établie."
ALLREADYCONNECTED="Connexion déjà existante."
FAILED="Connexion au GPS échoué!"
BTLOGO=/usr/share/icons/gnome/48x48/stock/io/stock_bluetooth.png
# Now the magic
PID=`pidof gpsd`
if [ ! -e /tmp/bt_gps_connected ]
then
rfcomm connect 4 &
/etc/init.d/gpsd start
if [ $PID ]
then
notify-send -i $BTLOGO -t 3000 "$TITLE" "$CONNECTED"
touch /tmp/bt_gps_connected
else
notify-send -i gtk-dialog-warning -t 3000 "$TITLE" "$FAILED"
killall gpsd
fi
else
notify-send -u critical -i gtk-dialog-info -t 3000 "$TITLE" "$ALLREADYCONNECTED"
fi
La en faites j'utilise touch pour créer un fichier qui sert d'argument mais c'est pas terrible, il faudrai que toute mes commande de connexion soit valider avant de dire que je suis correctement connecter, genre si le rfcomm echoue bah que ca ne lance meme pas le demon et que ca me dise directement que la connexion a échouer....
Je colle mon script de deconnexion du gps qui lui aussi n'est pas au point.
#!/bin/bash
#GPS connect based on HeadsetConnect 1.0 connect by Chrissss
# you need libnotify-bin to run this script
# Enter the bluetooth address of your headset here
RFCOMM=4
# Localisation
TITLE="GPS"
END="Connexion au GPS terminé."
FAILED="GPS non connecté!"
BTLOGO=/usr/share/icons/gnome/48x48/stock/io/stock_bluetooth.png
# Now the magic
PID=`pidof gpsd`
if [ -e /tmp/bt_gps_connected ]
then
gksudo rfcomm release $RFCOMM
killall gpsd
rm /tmp/bt_gps_connected
notify-send -i $BTLOGO -t 3000 "$TITLE" "$END"
else
notify-send -i gtk-dialog-warning -t 3000 "$TITLE" "$FAILED"
fi
Merci d'avance, je sais que je suis pas très clair n'hésiter pas a demander des infos.
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#2 Le 12/11/2006, à 11:50
- abetsic
Re : Aide pour script bash
Tu peux utiliser la variable spéciale $? qui contient la valeur de retour du dernier programme executé pour savoir si la dernière commande s'est bien terminée ou bien faire quelque chose du genre :
RETURN_VAL=ton programme
à vérifier la syntaxe
Je ne sais pas si bash est un langage paresseux, mais déclarer PID=`pidof bidule` avant que bidule ne soit lancé donnera quelque chose de bon... fais des echo $PID avant et après l'execution de rfcomm voir si tu récupères bien le pid que tu souhaites..
Hors ligne
#3 Le 12/11/2006, à 11:57
- atlas95
Re : Aide pour script bash
merci abetsic mais tu pourrais m'en dire encore plus ou me montrer...
Je me suis basé sur un bash déja existant pour faire ça et malgres que je comprends ce que tu dis je ne vois pas comment le mettre en place lol
Ca donnerai ça? :
#!/bin/bash
#GPS connect based on HeadsetConnect 1.0 connect by Chrissss
# you need libnotify-bin to run this script
# Enter the bluetooth address of your headset here
RFCOMM=rfcomm4
# Localisation
TITLE="GPS"
CONNECTED="Connexion au GPS établie."
ALLREADYCONNECTED="Connexion déjà existante."
FAILED="Connexion au GPS échoué!"
BTLOGO=/usr/share/icons/gnome/48x48/stock/io/stock_bluetooth.png
# Now the magic
PID=`pidof gpsd`
if [ ! -e /tmp/bt_gps_connected ]
then
rfcomm connect 4 &
/etc/init.d/gpsd start
if [ ! $? |grep busy ]
then
notify-send -i $BTLOGO -t 3000 "$TITLE" "$CONNECTED"
touch /tmp/bt_gps_connected
else
notify-send -i gtk-dialog-warning -t 3000 "$TITLE" "$FAILED"
killall gpsd
fi
else
notify-send -u critical -i gtk-dialog-info -t 3000 "$TITLE" "$ALLREADYCONNECTED"
fi
Dernière modification par atlas95 (Le 12/11/2006, à 12:02)
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#4 Le 12/11/2006, à 12:48
- atlas95
Re : Aide pour script bash
Je m'embrouille avec les pidof etc, il faut que le rfcomm reussisse obligatoirement avant de passer au reste en faites, sinon il faut dire que ca a échoué.
J'essai de jouer avec les pidof rfcomm et gpsd mais ca ne marche toujours pas...
Je n'y arrive pas avec les return_val ou $? ....
Merci d'avance a celui qui pourras me macher un peu plus le travail lol
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#5 Le 15/11/2006, à 18:34
- atlas95
Re : Aide pour script bash
Toujours d'actualité, quelqu'un peut il m'aider svp ?
Merci d'avance
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#6 Le 15/11/2006, à 19:21
- abetsic
Re : Aide pour script bash
Pour la manière return_val=`programme` j'ai regardé, ça marche pas, il faut utiliser $?
voilà à quoi je pense :
RFCOMM=rfcomm4
# Localisation
TITLE="GPS"
CONNECTED="Connexion au GPS établie."
ALLREADYCONNECTED="Connexion déjà existante."
FAILED="Connexion au GPS échoué!"
BTLOGO=/usr/share/icons/gnome/48x48/stock/io/stock_bluetooth.png
# Now the magic
PID=`pidof gpsd`
if [ ! -e /tmp/bt_gps_connected ]
then
rfcomm connect 4 &
RETURN_RFCOMM=$?
/etc/init.d/gpsd start
RETURN_GPSD=$?
if [ RETURN_RFCOMM -ne 0 ]; then
echo "erreur : rfcomm s\'est chié dessus et ne s\'est pas lancé!!!"
exit 1
fi
if [ RETURN_GPSD -ne 0 ]; then
echo "erreur : gpsd s\'est chié dessus et ne s\'est pas lancé!!!"
exit 2
fi
if [ ! $? |grep busy ]
then
notify-send -i $BTLOGO -t 3000 "$TITLE" "$CONNECTED"
touch /tmp/bt_gps_connected
else
notify-send -i gtk-dialog-warning -t 3000 "$TITLE" "$FAILED"
killall gpsd
fi
else
notify-send -u critical -i gtk-dialog-info -t 3000 "$TITLE" "$ALLREADYCONNECTED"
fi
Hors ligne
#7 Le 15/11/2006, à 23:18
- atlas95
Re : Aide pour script bash
Merci
J'ai des petites erreurs :
$ gpsconnect
Starting GPS daemon: gpsd.
/usr/local/bin/gpsconnect: line 25: [: RETURN_RFCOMM : expression de type 'entier' attendue
/usr/local/bin/gpsconnect: line 29: [: RETURN_GPSD : expression de type 'entier' attendue
/usr/local/bin/gpsconnect: line 34: [: "]" manquant
grep: ]: Aucun fichier ou répertoire de ce type
gpsd(4386): Opération non permise
gpsd: aucun processus tué
Dernière modification par atlas95 (Le 15/11/2006, à 23:19)
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#8 Le 15/11/2006, à 23:30
- abetsic
Re : Aide pour script bash
Ouais, j'ai oublié les $ quand on utilise la variable, donc dans les tests :
$RETURN_RFCOMM -ne 0 à la place de RETURN_FRCOMM -ne 0
et pareil pour l'autres variable
Hors ligne
#9 Le 15/11/2006, à 23:36
- atlas95
Re : Aide pour script bash
$ gpsconnect
Starting GPS daemon: gpsd.
/usr/local/bin/gpsconnect: line 34: [: "]" manquant
grep: ]: Aucun fichier ou répertoire de ce type
Encore ceci !
Merci beaucoup de ton aide!
Ubuntu sur un XPS m1330:c'est ici !
Mon blog sur ubuntu:c'est ici !
Jabber : cyril at jabber.levis-heb.net
Hors ligne
#10 Le 15/11/2006, à 23:51
- abetsic
Re : Aide pour script bash
Ben je comprends pas ce que tu veux faire avec cette ligne :
if [ ! $? |grep busy ]
c'est même pas syntaxiquement correcte... et $? ne contiendra que la valeur de retour de la commande précédente executée dans ton script...
Je ne connais pas ton script ni ce que tu veux faire avec, mais avec ce que je t'ai donné tu dois être capable de finir ce que tu souhaites.
Hors ligne
Pages : 1