Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/03/2015, à 15: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 big_smile

Dernière modification par Ric_punk (Le 05/04/2015, à 20:12)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#2 Le 29/03/2015, à 12: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.
tongue


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 résolu, 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, à 12: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, à 12:32)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 29/03/2015, à 12: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 résolu, 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, à 13: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 big_smile mais il marche aussi parfaitement
Je vais le décortiquer et essayer de le comprendre

Merci à vous 2 smile wink smile big_smile

Mon script passe maintenant de 1015 caractères à 589.... Watael, le weight watcher du script big_smile

Dernière modification par Ric_punk (Le 29/03/2015, à 13:35)


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#6 Le 29/03/2015, à 13: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, à 18:49)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 29/03/2015, à 18:35

Ric_punk

Re : [résolu]Script extinction écran

@Watael
Euh, j'ai rien compris à ton dernier message tongue


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#8 Le 29/03/2015, à 18: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, à 18:51)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 29/03/2015, à 23:52

Ric_punk

Re : [résolu]Script extinction écran

Ah ok ;-)

Merci beaucoup pour toutes les explications smile


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#10 Le 31/03/2015, à 09: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, à 10: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... tongue
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.
lol


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 résolu, 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, à 15:19

Ric_punk

Re : [résolu]Script extinction écran

@erresse

Ok, merci pour l'explication, en espérant que j'ai tout compris roll: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 ??? big_smile


Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...

Hors ligne

#13 Le 31/03/2015, à 15: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 résolu, 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, à 08: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, à 12: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 résolu, 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, à 13: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 big_smile

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