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 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 big_smile. 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

michol a écrit :

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

HP a écrit :

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.

HP a écrit :

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.

HP a écrit :

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

HP a écrit :

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