Pages : 1
#1 Le 18/10/2011, à 18:48
- michol
Optimisation de script
Bonjour,
depuis peu je me suis lancé dans l'écriture de scripts bash pour mes taches quotidiennes. Malheureusement, c'est une des première fois que je programme un script et je suis certains que ma façon de programmer n'est pas optimale.
Je vous propose donc ci-dessous un petit script bash qui me permet de synchroniser un dossier de mon PC avec un dossier de ma Freebox. Ce script est fait àpartir de différents morceaux glanés sur le net donc si vous avez des conseil je suis preneur:
#! /bin/bash
mount | grep //freebox-server.local/1.41.12-1336/
if [ "$?" -eq 0 ] ; then
echo "Le disque de partage est monté!"
echo "taper sur entrée pour lancer la synchronisation"
read
rsync -r -t -v --progress -s /home/mickael/Bureau/test/ /media/Partage/test/
echo "La synchronisation est terminée!"
else
echo "Le disque de partage n'est pas monté!"
echo "taper sur entrée pour tenter de monter le disque"
read
sudo mount -t cifs //freebox-server.local/1.41.12-1336/ /media/Partage -o guest,iocharset=utf8,file_mode=0777,dir_mode=0777
mount | grep //freebox-server.local/1.41.12-1336/
if [ "$?" -eq 0 ] ; then
echo "Le disque de partage est monté!"
echo "taper sur entrée pour lancer la synchronisation"
read
rsync -r -t -v --progress -s /home/mickael/Bureau/test/ /media/Partage/test/
echo "La synchronisation est terminée!"
else
echo "le montage du disque partage est impossible"
echo "la synchronisation a échouée"
fi
fi
Par avance merci pour votre aide
Hors ligne
#2 Le 18/10/2011, à 18:56
- sputnick
Re : Optimisation de script
Déjà :
if mount | grep -q "//freebox-server.local/1.41.12-1336/"; then
:°
Edit : les commandes sous Linux retournent un code de retour, ce que tu affiche avec $?
En fonction de ce code, si c'est 0 c'est vrai si c'est pas zéro c'est faux (pour bash), ce qui permet de simplifier le code avec une logique booléenne
Dernière modification par sputnick (Le 18/10/2011, à 19:04)
Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr
Hors ligne
#3 Le 18/10/2011, à 19:08
- Bousky
Re : Optimisation de script
Dans ce genre de cas je redirige la (ou les selon les cas) sortie de la commande vers /dev/null pour que l'exécution soit plus « propre ».
Il est conseillé de mettre le « else » sur le même niveau d'indentation que le « if » et le « fi » pour faciliter la lecture.
sudo mount -t cifs //freebox-server.local/1.41.12-1336/ /media/Partage -o guest,iocharset=utf8,file_mode=0777,dir_mode=0777
mount | grep //freebox-server.local/1.41.12-1336/
if [ "$?" -eq 0 ] ; then
Tu es sûr de ne pas pouvoir réutiliser le résultat de mount, genre « if sudo mount … ; then »
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#4 Le 18/10/2011, à 21:22
- michol
Re : Optimisation de script
Merci beaucoup pour ces remarques . Je vais tenter de m'améliorer. Si vous avez d'autres remarques n'hésitez pas...
Dernière modification par michol (Le 18/10/2011, à 21:22)
Hors ligne
#5 Le 18/10/2011, à 21:47
- HP
Re : Optimisation de script
Si vous avez d'autres remarques n'hésitez pas...
Ouais… écrire des trucs plus jolis… parce là, j'ai même pas envie de lire…
Donc, faudrait, a minima, apprendre à écrire des fonctions et, donc, à découper le programme en « unités logiques ».
Bon, et en plus des fonctions, faudrait aussi découvrir et/ou utiliser les variables, parce que les chemins écrits en dur… c'est moyen.
Et une fois de plus, utiliser bash pour çà… c'est (vraiment) n'importe quoi, un simple sh suffit amplement.
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#6 Le 18/10/2011, à 22:52
- sputnick
Re : Optimisation de script
Ouais… écrire des trucs plus jolis… parce là, j'ai même pas envie de lire…
C'est vrai que niveau présentation, il faut prendre les bon plis dès le début. Je te conseille cette lecture sur l'indentation, choisit en une et tiens y toi : http://fr.wikipedia.org/wiki/Style_d%27indentation (ce n'est pas que pour les autres, tu te rendra vite compte à terme que cette bonne pratique (terme en Anglais "best practice") t'aidera toi aussi à mieux relire ton code, même 1 an après où tu ne te souvient plus forcement de tout.)
Coder, c'est pas que bricoler, c'est aussi communiquer surtout lorsque tu t'adresse à un forum pour avoir des avis.
Donc, faudrait, a minima, apprendre à écrire des fonctions et, donc, à découper le programme en « unités logiques ».
Pourquoi pas, mais dans le cas présent les fonctions ne sont pas nécessaire. Je dirais que si ton code dépasse une centaine de ligne, tu peut commencer à y penser effectivement.
Bon, et en plus des fonctions, faudrait aussi découvrir et/ou utiliser les variables, parce que les chemins écrits en dur… c'est moyen.
Clair, il faut que tu rendes tes chemins variants afin de réutilisation et de modification aisée, par exemple en tête de script :
path_home="aaa"
path_partage="$path_home/xxx/ccc"
path_freebox="/zzz/ppp"
Pareil pour les variables, il faut choisir son style et s'y tenir. Ça peut être comme je l'ai_fait, ou bien DES_MAJUSCULES ou encore enCamelCase
Et une fois de plus, utiliser bash pour çà… c'est (vraiment) n'importe quoi, un simple sh suffit amplement.
Là dessus je ne suis pas d'accord. Bash est le shell par défaut sur toutes les distributions modernes, autant ne pas se passer de sa puissance syntaxique par rapport à sh.
Par contre michol, tu utilise le shebang #!/bin/bash alors que tes tests sont des tests sh. Quitte à utiliser bash, autant aller jusqu'au bout et utiliser des tests de type [[ ]] au lieu de [ ]
Si le but c'est la portabilité à tout prix, mieux vaut penser à Ruby, Python ou Perl
Dernière modification par sputnick (Le 18/10/2011, à 22:58)
Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr
Hors ligne
#7 Le 19/10/2011, à 06:20
- michol
Re : Optimisation de script
@HP
L'objectif de ce poste est justement d'ameliorer ma maniere d'ecrire sans devenir un expert. Toutefois si tu trouves ça trop désagreable rien ne te force a suivre cette discussion. Je pense que tu devrais te rendre compte que de nombreuses personnes ne sont pas familieres des conventions de la programmation...
Cela dit, je te remercie pour tes commentaires et tes pistes d'amelioration
@ sputnick
Merci encore pour ces commentaires constructifs, ainsi que pour le lien!
Hors ligne
Pages : 1