[Bash] Pourquoi ma boucle ne marche pas ?
Résolu
math_b67
Messages postés
604
Statut
Membre
-
math_b67 Messages postés 604 Statut Membre -
math_b67 Messages postés 604 Statut Membre -
Bonjour,
J'aimerai savoir ce qui ne va pas dans mon while, elle ne me renvoi pas d'erreur mais continue à l'infini, meme quand je met "o" ou "n"...
Je m'arrache les cheveux alors que je suis sur que c'est très simple... Voici le code :
Merci d'avance.
J'aimerai savoir ce qui ne va pas dans mon while, elle ne me renvoi pas d'erreur mais continue à l'infini, meme quand je met "o" ou "n"...
Je m'arrache les cheveux alors que je suis sur que c'est très simple... Voici le code :
while [ -z "$confirm" ] || [ "$confirm" != "n" ] || [ "$confirm" != "o" ] do echo "" read -p "Confirmer la suppression du repo : $repo (o/n) : " confirm done
Merci d'avance.
7 réponses
-
while 1 do echo "\nConfirmer la suppression du repo : $repo (o/n) : " read confirm if [ $confirm = "o" ] || [ $confirm = "y" ] || [ -z $confirm ]; then break fi done
Barbare et moche mais ça doit fonctionner
-
Par contre chez moi (GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)), ton script génère des erreurs d'abord à cause de "while 1" et ensuite avec la syntaxe de la commande "test". Voilà ce qui marche :
#! /bin/bash while : do echo "\nConfirmer la suppression du repo : $repo (o/n) : " read confirm if [[ $confirm = "o" ]] || [[ $confirm = "n" ]] || [[ -z "${confirm}" ]] then break fi done -
-
-
Bonjour a tous !!
Je planche sur cette boucle depuis 8h ce matin, et vous savez quoi ?! J'ai trouvé la solution !!! Héhé !
La voici :while [ -z "$confirm" ] || [ "$confirm" != "n" ] && [ "$confirm" != "o" ] do echo "" read -p "Confirmer la suppression du repo : $repo (o/n) : " confirm done
Eh oui, un p*tain de && m'a fait chier pendant plusieurs heures, mais on l'a matté ce c*n !! Hahah ^^
(Pour résoudre ce problème, je me suis fais un tableau listant toutes les sorties possible de ma condition, c'est une technique que je conseille à tous quand vous avez ce genre de problème, ça permet de voir l'erreur rapidement ;-) )
Encore merci pour votre aide ;) -
Salut,
Parce qu'il faut casser ta boucle ;-))
#! /bin/bash while [ -z "$confirm" ] || [ "$confirm" != "n" ] || [ "$confirm" != "o" ] do echo "" read -p "Confirmer la suppression du repo : $repo (o/n) : " confirm break done
-
Re salut ;-)
J'avais essayé et il me sort cette erreur :
/bin/ldereposup: ligne 19 : [: -z : opérateur binaire attendu -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Donc moi j'ai dis de la daube '-_-
zipe dans ton cas la boucle va sortir au premier passage quelle que soit la valeur de $confirm non ?
La vie est un mystère qu'il faut vivre, et non un problème à résoudre. (Gandhi) -
@Lapourax : une autre idée ? :-)
@zip : Si je fais cela, ma boucle s'arrête, peu importe la lettre qui est tapée par l'utilisateur donc cela ne me convient pas. Il faut que la boucle s'arrête au moment ou l'utilisateur tape "o" ou "n".
PS : J'aurais peut-etre du poster ce topic sur code-source maintenant que l'on est fusionné non ?... :P -
Avec quelques correctifs ton script fonctionne Lapourax !
while : do echo "" read -p "Confirmer la suppression du repo : $repo (o/n) : " confirm if [ $confirm = "o" ] || [ $confirm = "n" ] || [ -z $confirm ] then break fi done
Je vais l'utiliser en attendant, mais dès demain je vais quand même replancher sur cette boucle, c'est bizarre qu'elle ne passe pas...
Merci bien, à demain ;-)