[bug]Comportement bizarre d'un bout de script (if...elif...else)
Résolu
Swiss Knight
Messages postés
1956
Date d'inscription
Statut
Membre
Dernière intervention
-
Swiss Knight Messages postés 1956 Date d'inscription Statut Membre Dernière intervention -
Swiss Knight Messages postés 1956 Date d'inscription Statut Membre Dernière intervention -
Salut,
J'ai un bout de script qui se comporte bizarrement dans un cas, et ça marche tip-top dans l'autre... sauf que je ne comprends pas pourquoi ça ne joue pas dans le premier cas...
1er cas (mauvaise solution) :
2ème cas (bonne solution) :
C'est directement copiable-collable dans une console.
La nuance est subtile, c'est au niveau de la 14ème ligne du premier cas que je pige pas en fait...
Je lui demande en gros :
"si le bouton valider a été appuyé, et si string_o est non nulle (donc un choix a été de mot a été validé) alors echo le mot qui a été validé.
Le script lui, saute cette étape comme si elle n'était pas vérifiée pour finir sur le else final... quand bien même on a choisi le mot dans la liste !!!
-- BEGIN_OF_EDIT
En fait c'est même plus subtil que ça...
Il suffit d'inverser les deux tests du elif dans la 1ère solution pour qu'elle se comporte bien comme il faut comme la seconde :
elif [[ $? == 0 ]] && [[ -n "${string_o}" ]];
devient :
elif [[ -n "${string_o}" ]] && [[ $? == 0 ]];
Et ça marche.
-- END_OF_EDIT
;)
Merci de vos éclairages précieux...!!
PS : c'est vraiment top la nouvelle fonctionnalité de coloration syntaxique sur le forum :-D
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
J'ai un bout de script qui se comporte bizarrement dans un cas, et ça marche tip-top dans l'autre... sauf que je ne comprends pas pourquoi ça ne joue pas dans le premier cas...
1er cas (mauvaise solution) :
unset string_o; existing_words="salut, bonjour, aurevoir"; foo="hello" string_o=$(echo $foo | zenity --list --multiple --separator=", " --title="Add words" --text="Add words \nExisting words are : ${existing_words}" --column="Words") ##### mauvaise solution ########################################################### if [[ $? == 0 ]] && [[ -z "${string_o}" ]]; then zenity --question --title="Delete all words ?" --text="Supprimer tous les mots ?" if [[ $? == 0 ]] then echo "on a choisi d'effacer tous les mots" else echo "on sort du choix 2 sans rien faire" #exit ### <- on sort si on a clic sur annuler (choix 2). fi elif [[ $? == 0 ]] && [[ -n "${string_o}" ]]; then echo ${string_o} else echo "on sort du choix 1" #exit ### <- on sort si on a clic sur annuler (choix 1). fi
2ème cas (bonne solution) :
unset string_o; existing_words="salut, bonjour, aurevoir"; foo="hello" string_o=$(echo $foo | zenity --list --multiple --separator=", " --title="Add words" --text="Add words \nExisting words are : ${existing_words}" --column="Words") ##### bonne solution ########################################################### if [[ $? == 1 ]]; then echo "on sort du choix 1" #exit ### <- on sort si on a clic sur annuler (choix 1). elif [[ -z "${string_o}" ]] && [[ $? == 0 ]]; then zenity --question --title="Delete all words ?" --text="Supprimer tous les mots ?" if [[ $? == 0 ]] then echo "on a choisi d'effacer tous les mots" else echo "on sort du choix 2 sans rien faire" #exit ### <- on sort si on a clic sur annuler (choix 2). fi else echo ${string_o} fi
C'est directement copiable-collable dans une console.
La nuance est subtile, c'est au niveau de la 14ème ligne du premier cas que je pige pas en fait...
Je lui demande en gros :
"si le bouton valider a été appuyé, et si string_o est non nulle (donc un choix a été de mot a été validé) alors echo le mot qui a été validé.
Le script lui, saute cette étape comme si elle n'était pas vérifiée pour finir sur le else final... quand bien même on a choisi le mot dans la liste !!!
-- BEGIN_OF_EDIT
En fait c'est même plus subtil que ça...
Il suffit d'inverser les deux tests du elif dans la 1ère solution pour qu'elle se comporte bien comme il faut comme la seconde :
elif [[ $? == 0 ]] && [[ -n "${string_o}" ]];
devient :
elif [[ -n "${string_o}" ]] && [[ $? == 0 ]];
Et ça marche.
-- END_OF_EDIT
;)
Merci de vos éclairages précieux...!!
PS : c'est vraiment top la nouvelle fonctionnalité de coloration syntaxique sur le forum :-D
"Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement." -A. Einsten-
A voir également:
- [bug]Comportement bizarre d'un bout de script (if...elif...else)
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Le fichier à télécharger comporte plusieurs calques. l’un d’eux contient un mot caché. quel est ce mot ? - Forum Téléchargement
- Bug chromecast - Guide
- Iptv bug ✓ - Forum TV & Vidéo
?
Je coche résolu donc ;)
Merci.