#1 Le 03/11/2018, à 17:58
- Montesquat
[Résolu] Problème de boucle CASE
Bonjour
J'ai un problème (c'est évident) de boucle Case. Ce doit être tout bête, j'ai essayé plein de choses, regarder les forums ... et n'ai pas résolu mon problème: les test ne se font pas (je sais que je pourrais mettre un IF mais je voudrais tout de même savoir pourquoi cette boucle Case ne fonctionne pas).
Merci pour votre aide.
Voici le bout de programme:
Var="$(gsettings list-recursively | grep -i "sleep-inactive-ac-type")"
echo $Var
LongVar=${#Var} # Nombre de caractères de la variable
echo $LongVar
PosCarac=$(expr index "$Var" "'") #Position du caractère '
echo $PosCarac
let "((LongMotClef=$LongVar-$PosCarac-1))" # Longuer du mot clef par soustraction des variables précédentes
echo $LongMotClef
MotClef=${Var:$PosCarac:$LongMotClef} # extraction du mot clef
echo $MotClef
case "$MotCLef" in
nothing)
: # commande nulle (ne fait rien)
VarPrompt = "La mise en veille est active"
echo Test $VarPrompt;;
suspend)
: # commande nulle (ne fait rien)
VarPrompt = "La mise en veille est DESATIVEE"
echo Test $VarPrompt;;
*) echo echec
esac
Dernière modification par Montesquat (Le 04/11/2018, à 10:08)
Hors ligne
#2 Le 03/11/2018, à 18:15
- Hizoka
Re : [Résolu] Problème de boucle CASE
Salut,
donne le retour de
gsettings list-recursively | grep -i "sleep-inactive-ac-type"
qu'on voit la suite stp.
Mais ça, c'est pas bon :
VarPrompt = "La mise en veille est active"
il ne faut pas d'espace autour du =
Dernière modification par Hizoka (Le 03/11/2018, à 18:16)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#3 Le 03/11/2018, à 18:35
- Montesquat
Re : [Résolu] Problème de boucle CASE
Merci pour ta réponse.
Voici ta réponse:
gsettings list-recursively | grep -i "sleep-inactive-ac-type"
org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
Pour info, le retrait des espaces autour du = des commandes Echo, ne change rien.
Je suis sûr de la syntaxe des deux mots clef Suspend et Nothing car j'ai testé les variables d'environnement avec les deux paramétrages.
Hors ligne
#4 Le 03/11/2018, à 18:46
- Hizoka
Re : [Résolu] Problème de boucle CASE
C'est beaucoup de prise de tête pour pas grand chose là, perso je ferai ça déjà :
Var="org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'"
MotCLef="${Var%\'*}"
MotCLef="${MotCLef##*\'}"
case "${MotCLef}" in
nothing)
VarPrompt="La mise en veille est active" ;;
suspend)
VarPrompt="La mise en veille est DESATIVEE" ;;
esac
echo "Test ${VarPrompt:-erreur}"
Cela fonctionne-t-il chez toi ?
Tes echo te renvoient-ils bien les bonnes valeurs ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 03/11/2018, à 19:10
- Montesquat
Re : [Résolu] Problème de boucle CASE
Merci.
Comme d'habitude, le code des autres fonctionne et pas le mien.
bash MiseEnVeille_test
Test La mise en veille est DESATIVEE
Ce qui m'énerve c'est que je comprend pas pourquoi. J'ai corrigé au passage mon Case en
case "${MotCLef}" in
avec les {} comme chez toi ... et les tests de mon Case ne se font toujours pas.
Et pourtant ma variable n'a pas caractères finaux invisibles car quand j'en retire un de plus, le "d" de Suspend disparaît.
Hors ligne
#6 Le 03/11/2018, à 19:19
- Hizoka
Re : [Résolu] Problème de boucle CASE
"${MotCLef}" ne change rien par rapport à "$MotCLef" dans ce cas là, c'est juste une habitude.
Montre les retours de tes echo avec ton code original.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 03/11/2018, à 19:20
- pingouinux
Re : [Résolu] Problème de boucle CASE
Bonsoir,
@Montesquat : MotClef est différent de MotCLef
#!/bin/bash
MotClef=$(gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type)
case "$MotClef" in
"'nothing'") VarPrompt="La mise en veille est active" ;;
"'suspend'") VarPrompt="La mise en veille est DESATIVEE" ;;
*) VarPrompt=echec
esac
echo "Test ${VarPrompt:-erreur}"
Hors ligne
#8 Le 03/11/2018, à 20:06
- Montesquat
Re : [Résolu] Problème de boucle CASE
Tu es vraiment sympa.
Donc tu trouveras ci-dessous le code dans son état actuel (j'ai changé les {} et les pespace dans les = du Echo).
Var="$(gsettings list-recursively | grep -i "sleep-inactive-ac-type")"
echo $Var
LongVar=${#Var} # Nombre de caractères de la variable
echo $LongVar
PosCarac=$(expr index "$Var" "'") #Position du caractère '
echo $PosCarac
let "((LongMotClef=$LongVar-$PosCarac-1))" # Longuer du mot clef par soustraction des variables précédentes
echo $LongMotClef
MotClef=${Var:$PosCarac:$LongMotClef} # extraction du mot clef
echo $MotClef
case "${MotCLef}" in
nothing)
: # commande nulle (ne fait rien)
VarPrompt="La mise en veille est DESACTIVEE"
echo Test $VarPrompt;;
suspend)
: # commande nulle (ne fait rien)
VarPrompt="La mise en veille est active"
echo Test $VarPrompt;;
*) echo echec
esac
Et les Echo à la console
bash MiseEnVeille_script
org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
72
64
7
suspend
echec
Hors ligne
#9 Le 04/11/2018, à 00:54
- Hizoka
Re : [Résolu] Problème de boucle CASE
Comme l'indique pingouinux,
case "${MotCLef}" in
MotClef=${Var:$PosCarac:$LongMotClef} # extraction du mot clef
Un caractère qui diffère...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 04/11/2018, à 10:02
- Montesquat
Re : [Résolu] Problème de boucle CASE
Merci.
Effectivement cela focntionne maintenant.
J'avais vu ce message (#7) mais je n'avais pas compris car l'extrait de code qu'il insérait ne comprenait pas d'erreur.
Merci à tous et à ta patience.
Hors ligne
#11 Le 04/11/2018, à 12:17
- pingouinux
Re : [Résolu] Problème de boucle CASE
En as-tu profité pour simplifier ton script, comme indiqué en #7 ?
Il est en effet inutile de lister toutes les clés puis de faire un grep. Il suffit de récupérer le champ de la seule clé qui t'intéresse.
Hors ligne