[bug]Comportement bizarre d'un bout de script (if...elif...else)

Résolu/Fermé
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - Modifié par Swiss Knight le 29/01/2014 à 01:20
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 - 29 janv. 2014 à 13:29
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) :
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:

1 réponse

Utilisateur anonyme
29 janv. 2014 à 02:06
salut,

la valeur de
$?
est mise à jour après chaque commande.
tu dois donc utiliser une variable pour stocker la valeur de retour du
zenity
que tu veux tester.
1
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
Modifié par Swiss Knight le 29/01/2014 à 02:29
donc directement après la ligne de commande de zenity, je dois faire ça en gros :
ma_variable=$?

?
0
Swiss Knight Messages postés 1956 Date d'inscription samedi 22 novembre 2008 Statut Membre Dernière intervention 27 juillet 2016 110
29 janv. 2014 à 13:29
Après tests, c'est bien le cas, faut faire comme ça.
Je coche résolu donc ;)
Merci.
0