IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script à améliorer


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut Script à améliorer
    Bonjour à tous.

    Je débute dans l'écriture de shell script et j'aurais besoin de conseils.
    J'ai écris un script fonctionnel mais vraiment pas optimisé !

    En clair mon script fonctionne mais est vraiment lamentable

    Nom du script: xen-install.sh

    Compatible avec: Bash

    Descriptif: permet de créer automatiquement un machine virtuel Windows sur Xen + Qemu

    Pré-requis: avoir répertoire /xen/domU-Win32/ et /etc/xen/domU-Win32/

    mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    #! /bin/bash
    nombredisk=0;
    mem=0;
    proc=0;
    while [ $nombredisk -gt 2 ] || [ $nombredisk -lt 1 ] ; do
            clear
            echo "1 - CHOIX DU NOMBRE DE DISQUE (2 Maximum)";
            echo "";
            echo -n "Combien de disque souhaitez vous utiliser ? : ";
            read nombredisk
    done
    case $nombredisk in
            1)
            clear
            echo "1.1 - CHOIX DE LA TAILLE DU DISQUE (Go)";
            echo "";
            echo "Exemple pour 20Go : 20G";
            echo "";
            echo -n "Quelle taille voulez-vous pour le disque ? : ";
            read tailledisk1
            clear
            echo "2 - CHOIX DU NOM DU SERVEUR ";
            echo "";
            echo -n "Quelle nom voulez-vous attribuer à votre serveur ? : ";
            read nomsrv
            echo "Création de l'image en cours, veuillez patienter ....";
            echo "";
            mkdir /xen/domU-Win32/$nomsrv
            qemu-img create /xen/domU-Win32/$nomsrv/$nomsrv.img $tailledisk1
            while [ ! -f "/xen/ISO/$iso" ] ; do
                    clear
                    echo "3 - CHOIX DE L'IMAGE ISO";
                    echo "";
                    ls -l /xen/ISO
                    echo "";
                    echo -n "Quelle ISO voulez-vous utiliser ? : ";
                    read iso
            done
            clear
            echo "4 - CHOIX MEMOIRE SERVEUR (Mo)";
            echo "";
            echo "Exemple pour 1Go : 1024";
            echo "";
            echo -n "Combien de mémoire voulez-vous attribuer à votre serveur ? : ";
            read mem
            while [ $proc -gt 4 ] || [ $proc -lt 1 ] ; do
                    clear
                    echo "5 - CHOIX PROCESSEUR SERVEUR (4 Maximum)";
                    echo "";
                    echo -n "Combien de processeurs voulez-vous attribuer à votre serveur ? : ";
                    read proc
            done
            ;;
            2) clear
            echo "1.1 - CHOIX DE LA TAILLE DES DISQUES (Go)";
            echo "";
            echo "Exemple pour 20Go : 20G";
            echo "";
            echo -n "Quelle taille voulez-vous pour le 1er disque ? : ";
            read tailledisk1
            echo "";
            echo -n "Quelle taille voulez-vous pour le 2eme disque ? : ";
            read tailledisk2
            clear
            echo "2 - CHOIX DU NOM DU SERVEUR ";
            echo "";
            echo -n "Quelle nom voulez-vous attribuer à votre serveur ? : ";
            read nomsrv
            echo "Création des images en cours, veuillez patienter ....";
            echo "";
            mkdir /xen/domU-Win32/$nomsrv
            qemu-img create /xen/domU-Win32/$nomsrv/$nomsrv.img $tailledisk1
            qemu-img create /xen/domU-Win32/$nomsrv/"$nomsrv"-disk2.img $tailledisk2
            while [ ! -f "/xen/ISO/$iso" ] ; do
                    clear
                    echo "3 - CHOIX DE L'IMAGE ISO";
                    echo "";
                    ls -l /xen/ISO
                    echo "";
                    echo -n "Quelle ISO voulez-vous utiliser ? : ";
                    read iso
            done
            clear
            echo "4 - CHOIX MEMOIRE SERVEUR (Mo)";
            echo "";
            echo "Exemple pour 1Go : 1024";
            echo "";
            echo -n "Combien de mémoire voulez-vous attribuer à votre serveur ? : ";
            read mem
            while [ $proc -gt 4 ] || [ $proc -lt 1 ] ; do
                    clear
                    echo "5 - CHOIX PROCESSEUR SERVEUR (4 Maximum)";
                    echo "";
                    echo -n "Combien de processeurs voulez-vous attribuer à votre serveur ? : ";
                    read proc
            done
            ;;
    esac
    clear
    echo "6 - CHOIX DU MOT DE PASSE VNC";
    echo "";
    echo "Pour vous connecter à votre domU en VNC,";
    echo "Connectez votre client VNC sur l'adresse : 94.23.11.20:<port>";
    echo "Les numéros de port VNC sont incrémentés avec les domU.";
    echo "Donc pour le premier domU, le numéro de port est le 0, pour le second domU, le 1 ect...";
    echo "Pour voir la liste des domU, utilisez la commande xm list.";
    echo "";
    echo -n "Quel mot de passe souhaitez vous pour le server VNC de votre domU ? : ";
    read vncmdp
    clear
    echo "7 - RECAPITULATIF DU FICHIER XEN $nomsrv";
    echo "";
    echo " Nombre de disque :       $nombredisk";
    echo " Taille des disques :     $tailledisk1 $tailledisk2";
    echo " Nom du serveur : $nomsrv";
    echo " Image ISO utilisée :     $iso";
    echo " Memoire serveur :        $mem";
    echo " Processeur serveur :     $proc";
    echo " Mot de passe VNC :       $vncmdp";
    echo "";
    echo "import os, re" >> /etc/xen/domU-Win32/$nomsrv
    echo "arch = os.uname()[4]" >> /etc/xen/domU-Win32/$nomsrv
    echo "arch_libdir = 'lib'" >> /etc/xen/domU-Win32/$nomsrv
    echo "kernel = \"/usr/lib/xen/boot/hvmloader\"" >> /etc/xen/domU-Win32/$nomsrv
    echo "builder='hvm'" >> /etc/xen/domU-Win32/$nomsrv
    echo "memory = $mem" >> /etc/xen/domU-Win32/$nomsrv
    echo "name = \"$nomsrv\"">> /etc/xen/domU-Win32/$nomsrv
    echo "vcpus=$proc" >> /etc/xen/domU-Win32/$nomsrv
    echo "cpus = \"0-3\"" >> /etc/xen/domU-Win32/$nomsrv
    echo "vif = [ 'type=ioemu, bridge=xenbr0' ]" >> /etc/xen/domU-Win32/$nomsrv
    if [ $nombredisk -eq 1 ] ; then
            echo "disk = [ 'file:/xen/domU-Win32/$nomsrv/$nomsrv.img,hda,w', 'file:/xen/ISO/$iso,hdc:cdrom,r' ]" >> /etc/xen/domU-Win32/$nomsrv
    elif [ $nombredisk -eq 2 ] ; then
            echo "disk = [ 'file:/xen/domU-Win32/$nomsrv/$nomsrv.img,hda,w', 'file:/xen/domU-Win32/$nomsrv/"$nomsrv"-disk2.img,hdb,w', 'file:/xen/ISO/$iso,hdc:cdrom,r' ]" >> /etc/xen/domU-Win32/$nomsrv
    fi
    echo "device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'" >> /etc/xen/domU-Win32/$nomsrv
    echo "boot=\"dc\"" >> /etc/xen/domU-Win32/$nomsrv
    echo "vnc=1" >> /etc/xen/domU-Win32/$nomsrv
    echo "vncconsole=1" >> /etc/xen/domU-Win32/$nomsrv
    echo "vncunused=1" >> /etc/xen/domU-Win32/$nomsrv
    echo "vncpasswd='$vncmdp'" >> /etc/xen/domU-Win32/$nomsrv
    echo "nographic=0" >> /etc/xen/domU-Win32/$nomsrv
    echo "stdvga=1" >> /etc/xen/domU-Win32/$nomsrv
    echo "serial='pty'" >> /etc/xen/domU-Win32/$nomsrv
    echo "usb=1" >> /etc/xen/domU-Win32/$nomsrv
    echo "usbdevice='mouse'" >> /etc/xen/domU-Win32/$nomsrv
    echo "keymap='fr'" >> /etc/xen/domU-Win32/$nomsrv
    echo "guest_os_type='windows'" >> /etc/xen/domU-Win32/$nomsrv
    echo "Fichier $nomsrv créé et configuré avec succès";
    echo "";
    echo -n "Souhaitez-vous démarrer votre serveur virtuel ? (O/N):  ";
    read demarrage
    if [ "$demarrage" = "O" ] || [ "$demarrage" = "o" ]; then
            xm create /etc/xen/domU-Win32/$nomsrv
    else
            echo "";
            echo "Configuration terminée";
            echo "Pour lancer votre domU, utilisez la commande : xm create /etc/xen/domU-Win32/$nomsrv";
            echo "";
    fi
    J'aimerais améliorer mes cases, mes boucles et mes contrôles d'erreur et surtout l'écriture du fichier de conf du domU. Comme je ne sais pas traiter les fichiers avec une commande genre sed ou ed, j'ai carrément récupéré les variables de la configuration et j'écris complètement le fichier avec des echo ; ce qui est stupide à mon avis puisque j'imagine qu'il y a une possibilité de trouver une variable précise dans un fichier et de lui donner la valeur récupérée par le script via la commande "read".

    Pour les contrôles d'erreur, je parle des valeurs entrées par l'utilisateur mais aussi des vérifications, comme par exemple l'existence des répertoire de destination ect.

    Si vous pouviez me donner des pistes pour améliorer tout ça, ça serait cool.

    Merci pour votre aide

    A+

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Bonjour

    Je n'aime pas trop les scripts qui posent des tas de questions.
    Je préfère un script avec plein de paramètres qui spécifient tout d'un coup.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre à l'essai

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut
    salut ggnore,

    Oui c'est vrai que je n'y est pas pensé et puis je n'ai jamais travailler avec.
    je vais voir comment le transformer.

  4. #4
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Je crois que pour faire de l'administration système, il ne faut pas d'interactif. Ainsi, il est possible d'utiliser un script dans un autre script pour automatiser de plus en plus. S'il y a toute une liste de paramètres (et ça arrive souvent), alors des fichiers d'entrée sont en général utilisés. Parce qu'exécuter le script une fois, c'est instructif, mais le faire dix fois sur dix machines différentes, ça commence à être long de retaper à peu près les même choses. Et pour les explications, un fichier README est en général suffisant.

    Si on retire la partie d'entrées et d'explications, le script se résume à peu de choses, et c'est ça qui doit apparaître dans le programme.

    Il peut y avoir quelques fichiers modèles avec des noms bien clairs et l'on choisira parmi eux, ou on en prendra un proche pour en modifier quelques paramètres. Si tous les fichiers de paramètres existent, on peut ré-installer toutes les machines virtuelles de manière totalement automatique à la vitesse grand-V!

Discussions similaires

  1. script à améliorer
    Par exe2bin dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 31/08/2011, 15h57
  2. [Galerie] Un peu d'aide pour améliorer un script
    Par ambigua dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 21/02/2008, 22h32
  3. Appel d'offre pour une amélioration de script
    Par Hamzaxxx dans le forum Autres
    Réponses: 0
    Dernier message: 05/12/2007, 14h14
  4. Réponses: 6
    Dernier message: 23/01/2007, 17h20
  5. Améliorer le temps d'éxécution d'un script
    Par totoc1001 dans le forum MATLAB
    Réponses: 8
    Dernier message: 21/12/2006, 10h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo