Pb avec boucle while
Résolu/Fermé
sebphilip
Messages postés
4
Date d'inscription
mercredi 29 février 2012
Statut
Membre
Dernière intervention
22 mars 2012
-
22 mars 2012 à 21:01
Utilisateur anonyme - 23 mars 2012 à 22:06
Utilisateur anonyme - 23 mars 2012 à 22:06
A voir également:
- Pb avec boucle while
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Tv orange chargement en boucle ✓ - Forum TV & Vidéo
- Huawei s'allume et s'éteint en boucle - Forum Huawei
- Redémarrage en boucle Xiamo mi note 10 - Forum Xiaomi
4 réponses
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
Modifié par _Tawal_ le 22/03/2012 à 21:39
Modifié par _Tawal_ le 22/03/2012 à 21:39
Bonjour,
Essaie avec cette condition :
En gros ça veut dire : Tant que $numerodeportable n'est pas vide fait .....
Essaie avec cette condition :
while [ ! -z $numeroportable ]
En gros ça veut dire : Tant que $numerodeportable n'est pas vide fait .....
Utilisateur anonyme
22 mars 2012 à 22:28
22 mars 2012 à 22:28
salut,
en fait, c'est le contraire que veut sebphilip :
tant que num est vide
autrement dit
jusqu'à ce que num ait un valeur
en fait, c'est le contraire que veut sebphilip :
tant que num est vide
while [ -z "$num" ]; do
autrement dit
jusqu'à ce que num ait un valeur
until [ -n "$num" ]; do
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
23 mars 2012 à 11:27
23 mars 2012 à 11:27
Ah moi j'avais compris le contraire !
Ma condition: quand numéro de portable est vide, je sors de la boucle.
C'est ce qu'il dit.
Il sort de la boucle quand $numerpprtable est vide.
Ma condition: quand numéro de portable est vide, je sors de la boucle.
C'est ce qu'il dit.
Il sort de la boucle quand $numerpprtable est vide.
ok, alors tu inverses -n et -z dans ma proposition.
mais ça ne permettra plus d'entrer dans la boucle, puisque la variable n'est pas définie par défaut.
tu devrais revoir ton algorithme, il ne paraît pas correct.
la requête SQL devrais
- ne sortir que les enregistrements pour lesquels le numportable est renseigné _et_ bienvenue vaut 0
- être redirigée vers une boucle while pour envoyer les messages et construire une variable qui servira, en sortant de la boucle, à effectuer la mise à jour de la BDD.
Il faut encore peaufiner...
mais ça ne permettra plus d'entrer dans la boucle, puisque la variable n'est pas définie par défaut.
tu devrais revoir ton algorithme, il ne paraît pas correct.
la requête SQL devrais
- ne sortir que les enregistrements pour lesquels le numportable est renseigné _et_ bienvenue vaut 0
- être redirigée vers une boucle while pour envoyer les messages et construire une variable qui servira, en sortant de la boucle, à effectuer la mise à jour de la BDD.
Il faut encore peaufiner...
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
23 mars 2012 à 14:07
23 mars 2012 à 14:07
Il suffit d'initialiser la variable $numeroportable au début du script à une valeur "bâtarde".
Et le script rentrera dans la boucle.
Cette valeur bâtarde n'occasionnera pas d'erreurs puisque tu affecte une valeur dans la boucle avant d'utiliser cette variable.
Et le script rentrera dans la boucle.
Cette valeur bâtarde n'occasionnera pas d'erreurs puisque tu affecte une valeur dans la boucle avant d'utiliser cette variable.
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
23 mars 2012 à 20:17
23 mars 2012 à 20:17
Bon je crois savoir pourquoi :
il faut tester la variable $numeroportable et "break" la boucle avant qu'elle recommence !
en gros ça donne ça :
Mais c'est brutal !
il faut tester la variable $numeroportable et "break" la boucle avant qu'elle recommence !
en gros ça donne ça :
#!/bin/bash while [ ! -z $numeroportable ] do requete=$(mysql -h adresseip -u utilisateur -pMDP -B --exec="connect BDD;SELECT numeroportable,name FROM TABLE WHERE bienvenue='0'") echo $requete numeroportable='echo $requete |cut -d" " -f3' nom='echo $requete |cut -d" " -f4' if [ -z $numeroportable ] then break fi echo $numeroportable echo $nom echo 'message envoyé' miseajour=$(mysql -h adresseip -u utilisateur -pMDP -B --exec="connect BDD;UPDATE TABLE SET bienvenue='1' WHERE name='$nom'") done echo 'rien a faire'
Mais c'est brutal !
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
23 mars 2012 à 20:19
23 mars 2012 à 20:19
Mais du coup la condition de la boucle while ne sert à rien !
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
23 mars 2012 à 21:24
23 mars 2012 à 21:24
Tu as fait quoi pour régler le problème du fi unexpected ?
_Tawal_
Messages postés
644
Date d'inscription
jeudi 23 février 2012
Statut
Membre
Dernière intervention
7 juillet 2012
73
23 mars 2012 à 21:37
23 mars 2012 à 21:37
Zut le point virgule après la condition ! Mea culpa !
Utilisateur anonyme
23 mars 2012 à 22:06
23 mars 2012 à 22:06
Je voyais plutôt quelquechose comme ça
mes souvenirs de mysql ne sont plus très frais, et je n'ai pas de base données pour tester. Le but est d'avoir le moins de connexions possible (ici, idéalement, deux).
#!/bin/bash while read numportable name do [ -n "$noms" ] && noms="$noms OR name='$name'" || noms="name='$name'" echo "exécution envoi d'un message à $name, vers $numportable" done < <(mysql -h adresseip -u utilisateur -pMDP -B --exec="connect BDD;SELECT numeroportable,name FROM TABLE WHERE bienvenue='0'") mysql -h adresseip -u utilisateur -pMDP -B --exec="connect BDD;UPDATE TABLE SET bienvenue='1' WHERE $nom"
mes souvenirs de mysql ne sont plus très frais, et je n'ai pas de base données pour tester. Le but est d'avoir le moins de connexions possible (ici, idéalement, deux).