Pages : 1
#1 Le 28/03/2015, à 14:48
- Ric_punk
[résolu]Script extinction écran
Salut à tous
J'ai écrit un script pour me permettre de changer le temps avant extinction de l'écran. (chose que je fais assez souvent)
Je précise que j'ai écrit ce script en adaptant certaines choses trouvées sur le net à ce que je voulais faire
J'aimerais avoir votre avis
#!/bin/bash
duree=("10" "60" "120" "300" "600")
ac=("dconf write /org/mate/power-manager/sleep-display-ac")
battery=("dconf write /org/mate/power-manager/sleep-display-battery")
choix=$(zenity --list --radiolist \
--title "Extinction de l'écran" --text "Durée avant extinction de l'écran" \
--height "210"\
--column="Choix" --column="Durée" --column="Temps"\
--hide-column="2" --print-column="2" --hide-header\
true "${duree[0]}" "10 secondes"\
false "${duree[1]}" "1 minute"\
false "${duree[2]}" "2 minutes"\
false "${duree[3]}" "5 minutes"\
false "${duree[4]}" "10 minutes");
if [ "$choix" == "${duree[0]}" ]; then $ac ${duree[0]} && $battery ${duree[0]}
elif [ "$choix" == "${duree[1]}" ]; then $ac ${duree[1]} && $battery ${duree[1]}
elif [ "$choix" == "${duree[2]}" ]; then $ac ${duree[2]} && $battery ${duree[2]}
elif [ "$choix" == "${duree[3]}" ]; then $ac ${duree[3]} && $battery ${duree[3]}
elif [ "$choix" == "${duree[4]}" ]; then $ac ${duree[4]} && $battery ${duree[4]}
else
exit 0
fi
Mon script fonctionne, en vérifiant dans dconf les valeurs changent effectivement avec celle que je choisis
Est-ce que je peux simplifier encore plus le code ?
Merci
Dernière modification par Ric_punk (Le 05/04/2015, à 19:12)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#2 Le 29/03/2015, à 11:11
- erresse
Re : [résolu]Script extinction écran
Salut,
Ben il est déjà pas très touffu, ton script...
Tu peux peut-être remplacer la batterie de "if... elif" par un "case" qui récupérerait la durée choisie dans "$duree_choisie" pour n'avoir qu'une seule exécution de "$ac / $battery" en fin de structure.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#3 Le 29/03/2015, à 11:31
- Watael
Re : [résolu]Script extinction écran
salut,
elle sert surtout à rien cette suite de if !
#!/bin/bash
duree=(10 60 120 300 600)
pwrMgmt() { dconf write /org/mate/power-manager/sleep-display-$1 $2;}
choix=$(zenity --list --radiolist \
--title "Extinction de l'écran" --text "Durée avant extinction de l'écran" \
--height "210"\
--column="Choix" --column="Durée" --column="Temps"\
--hide-column="2" --print-column="2" --hide-header\
true "${duree[0]}" "10 secondes"\
false "${duree[1]}" "1 minute"\
false "${duree[2]}" "2 minutes"\
false "${duree[3]}" "5 minutes"\
false "${duree[4]}" "10 minutes");
(($?)) && exit 1 || { pwrMgmt ac $choix && pwrMgmt battery $choix;}
utiliser une variable ou un tableau pour stocker une commande est également une mauvaise idée.
je les ai remplacées par une seule fonction qui prend deux arguments.
Dernière modification par Watael (Le 29/03/2015, à 11:32)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 29/03/2015, à 11:51
- erresse
Re : [résolu]Script extinction écran
@Watael :
Bravo pour ton expertise ! Je dois dire que tu l'as compressé "à donf" son script...
Je ne sais pas ce qu'en pense Ric_punk mais, pour ma part, moi qui ne suis pas un Paganini du script, je ne comprends strictement plus rien à ce que je lis dedans. Par bonheur je n'ai pas à faire la maintenance de tels scripts !
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#5 Le 29/03/2015, à 12:30
- Ric_punk
Re : [résolu]Script extinction écran
Merci de vos réponses
Ben vi il est touffu mon script mais je suis un peu comme erresse, je ne comprends plus tout ce qu'il y a dedans mais il marche parfaitement !!!!
Après ton message erresse j'ai modifié mon script comme suit
#!/bin/bash
ac=("dconf write /org/mate/power-manager/sleep-display-ac")
battery=("dconf write /org/mate/power-manager/sleep-display-battery")
choix=$(zenity --list --radiolist \
--title "Extinction de l'écran" --text "Durée avant extinction de l'écran" \
--height "210"\
--column="Choix" --column="Durée" --column="Temps"\
--hide-column="2" --print-column="2" --hide-header\
true "10" "10 secondes"\
false "60" "1 minute"\
false "120" "2 minutes"\
false "300" "5 minutes"\
false "600" "10 minutes");
case $choix in
*"10"* )
$ac 10 && $battery 10
;;
esac
case $choix in
*"60"* )
$ac 60 && $battery 60
;;
esac
case $choix in
*"120"* )
$ac 120 && $battery 120
;;
esac
case $choix in
*"300"* )
$ac 300 && $battery 300
;;
esac
case $choix in
*"600"* )
$ac 600 && $battery 600
;;
esac
exit 0
fi
Ce qui le rend encore assez touffu
Par contre celui de Watael est minus mais il marche aussi parfaitement
Je vais le décortiquer et essayer de le comprendre
Merci à vous 2
Mon script passe maintenant de 1015 caractères à 589.... Watael, le weight watcher du script
Dernière modification par Ric_punk (Le 29/03/2015, à 12:35)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#6 Le 29/03/2015, à 12:50
- Watael
Re : [résolu]Script extinction écran
non !
case $var in
cas1) cmd1;;
cas2) cmd2;;
*) cmd_autreCas;;
esac
Dernière modification par Watael (Le 29/03/2015, à 17:49)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 29/03/2015, à 17:35
- Ric_punk
Re : [résolu]Script extinction écran
@Watael
Euh, j'ai rien compris à ton dernier message
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#8 Le 29/03/2015, à 17:46
- Watael
Re : [résolu]Script extinction écran
toi, tu as fait:
case $var in
cas1) comd1;;
esac
case $var in
cas2) comd2;;
esac
case $var in
*) comd_autrecas;;
esac
alors que la forme correcte d'un case/esac est celle que j'ai montrée dans mon message précédent.
Dernière modification par Watael (Le 29/03/2015, à 17:51)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 29/03/2015, à 22:52
- Ric_punk
Re : [résolu]Script extinction écran
Ah ok ;-)
Merci beaucoup pour toutes les explications
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#10 Le 31/03/2015, à 08:44
- Ric_punk
Re : [résolu]Script extinction écran
Voilà ce que ça donne si j'ai compris
#!/bin/bash
duree=(10 60 120 300 600)
ac=("dconf write /org/mate/power-manager/sleep-display-ac")
bat=("dconf write /org/mate/power-manager/sleep-display-battery")
choix=$(zenity --list --radiolist \
--title "Extinction de l'écran" --text "Durée avant extinction de l'écran" \
--height "210"\
--column="Choix" --column="Durée" --column="Temps"\
--hide-column="2" --print-column="2" --hide-header\
true "${duree[0]}" "10 secondes"\
false "${duree[1]}" "1 minute"\
false "${duree[2]}" "2 minutes"\
false "${duree[3]}" "5 minutes"\
false "${duree[4]}" "10 minutes");
case $choix in
*0) $ac $choix & $bat $choix;;
esac
case $choix in
*1) $ac $choix & $bat $choix;;
esac
case $choix in
*2) $ac $choix & $bat $choix;;
esac
case $choix in
*3) $ac $choix & $bat $choix;;
esac
case $choix in
*4) $ac $choix & $bat $choix;;
esac
case $choix in
* ) exit 0
esac
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#11 Le 31/03/2015, à 09:44
- erresse
Re : [résolu]Script extinction écran
Non, tu n'as pas compris.
Une structure "case/esac" serait composée comme ceci dans ton cas :
case $choix in
10) suspend=10;;
60) suspend=60;;
120) suspend=120;;
300) suspend=300;;
600) suspend=600;;
*) echo "Le choix est incohérent !"
exit 1;;
esac
$ac $suspend && $bat $suspend
exit 0
Mais, comme tu peux le voir et comme te l'avait dit Watael, il ne sert à rien de tester $choix, ni par des "if" ni par un "case" puisque cette variable en sortie de zenity contient déjà la valeur dont tu as besoin...
Je t'ai donné la structure ci-dessus pour illustrer mon propos, à titre d'exemple, mais tu te rends compte tout de suite que $suspend vaut strictement la même chose que $choix et que la commande "$ac $choix && $bat $choix" aurait parfaitement convenu sans rien tester.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#12 Le 31/03/2015, à 14:19
- Ric_punk
Re : [résolu]Script extinction écran
@erresse
Ok, merci pour l'explication, en espérant que j'ai tout compris :P
donc, en suivant ton explication, voici ce que ça donne
#!/bin/bash
ac=('dconf write /org/mate/power-manager/sleep-display-ac')
bat=('dconf write /org/mate/power-manager/sleep-display-battery')
choix=$(zenity --list --radiolist \
--title "Extinction de l'écran" --text "Durée avant extinction de l'écran" \
--height "210"\
--column="Choix" --column="Durée" --column="Temps"\
--hide-column="2" --print-column="2" --hide-header\
true "10" "10 secondes"\
false "60" "1 minute"\
false "120" "2 minutes"\
false "300" "5 minutes"\
false "600" "10 minutes");
case $choix in
10) duree=10;;
60) duree=60;;
120) duree=120;;
300) duree=300;;
600) duree=600;;
*) exit 1;;
esac
$ac $duree && $bat $duree
exit 0
J'ai bon ???
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#13 Le 31/03/2015, à 14:28
- erresse
Re : [résolu]Script extinction écran
Là oui, c'est bon.
Mais toujours aussi inutile de tester $choix pour valoriser $duree, puisqu'il suffit d'utiliser $choix qui contient directement la valeur.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#14 Le 01/04/2015, à 07:12
- Ric_punk
Re : [résolu]Script extinction écran
Donc j'enlève le "exit 0" de la fin qui ne sert à rien c'est ça ?
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#15 Le 01/04/2015, à 11:44
- erresse
Re : [résolu]Script extinction écran
Pourquoi le "exit 0" ? Qu'est-ce qu'il t'a donc fait pour que tu veuilles le supprimer ???
Cette instruction en fin de script indique seulement que tout s'est bien passé dans le compte-rendu d'exécution que tu peux ensuite tester pour vérifier si tout s'est bien passé, justement.
Si, par exemple, la commande zenity avait échoué (pour une raison quelconque, ce n'est qu'un exemple), tu pourrais le savoir en testant ce code de retour ainsi :
bash scrit_extinction_ecran
if [ $? != 0 ]; then echo "il y a eu une erreur !"; fi
Quant à ce que je voulais dire : La structure "case/esac" est inutile parce-que ton script peut ressembler à ça et fonctionner pareillement.
#!/bin/bash
ac=('dconf write /org/mate/power-manager/sleep-display-ac')
bat=('dconf write /org/mate/power-manager/sleep-display-battery')
choix=$(zenity --list --radiolist \
--title "Extinction de l'écran" --text "Durée avant extinction de l'écran" \
--height "210"\
--column="Choix" --column="Durée" --column="Temps"\
--hide-column="2" --print-column="2" --hide-header\
true "10" "10 secondes"\
false "60" "1 minute"\
false "120" "2 minutes"\
false "300" "5 minutes"\
false "600" "10 minutes");
$ac $choix && $bat $choix
exit 0
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#16 Le 01/04/2015, à 12:32
- Ric_punk
Re : [résolu]Script extinction écran
Merci de toutes ces explications.... j'ai encore des tonnes de choses à apprendre et surtout à comprendre
Donc dans ton dernier exemple les variables ne sont pas vérifiées mais l'exécution correct du script est vérifié, c'est ça ?
Merci en tout cas ;-)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne