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

Linux Discussion :

Contenu des variables...


Sujet :

Linux

  1. #1
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut Contenu des variables...
    Bonjour,
    Je fais un script pour changer de serveur "facilement" et je galère sur un truc...
    voici le code:
    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
     
    #! /bin/ksh
    echo "    --------------------------------------"
    echo "   |                                      |"
    echo "   |  Procédure de changement de serveur  |"
    echo "   |                                      |"
    echo "    --------------------------------------"
    cd /etc
    if [ -f hosts ]; then
      # Sauvegarde du fichier hosts en hosts.old:
      cp hosts hosts.old
      if [ -f hosts.old ]; then
        # Le fichier host.old a bien été créé
        # Récupération du serveur actif:
        svr_old=`gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`
        echo "Le serveur actuel est $svr_old"
        echo "------------------------------"
        typeset -i rang=0
        typeset -i choix_svr=999
        typeset nom
        echo "Les serveurs potentiels sont:"
        gawk -F" " '{if ($3 == "#svrrx300") print $2;}' hosts |
        while read name
        do
          echo $rang" : "$name
          nom[rang]=$name
          rang=rang+1
        done
        echo "------------------------------"
        # Demande à l'utilisateur:
        echo "Choisissez parmi ces derniers quel serveur vous désirez utiliser"
        echo "(Entrer le numéro correspondant au serveur, se situant devant son nom)"
        read choix_svr
        echo "------------------------------"
        echo "Vous avez choisi le serveur numéro $choix_svr"
        echo "Soit le serveur nommé " ${nom[choix_svr]}
        echo "------------------------------"
        echo "Tests en cours"
        if [ $choix_svr -gt rang ]; then
          # L'utilisateur n'a pas entré un numéro valide
          echo "------------------------------"
          echo "Le numéro que vous avez entré n'est pas valide"
          echo "Le changement de serveur n'est pas possible"
        else
          # Le numéro entré par l'utilisateur est valide.
          # On teste l'accessibilité du serveur:
          /bin/ping -c 1 ${nom[choix_svr]}
          if [ $? = 0 ]; then
            # On démonte les répertoires de /DATA situés sur l'ancien serveur:
            sudo /bin/umount /DATA/INSPECTION
            sudo /bin/umount /DATA/SAPHIR
            sudo /bin/umount /DATA/CIVAMIS
            sudo /bin/umount /DATA/IMAGES
            sudo /bin/umount /DATA/CHANFREINS 
            sudo /bin/umount /DATA/TRAMES
            # On ajoute un # devant l'ancien serveur et on enlève celui devant le nouveau:
            cat hosts | sed -r -e "
            /$svr_old/{
            s/(svrrx300)/#\1/
            }
            /${nom[$choix_svr]}/{
            s/#(svrrx300)/\1/
            }" > hosts.new
            mv hosts.new hosts
            # On remonte les répertoires de /DATA sur le nouveau serveur:
            sudo /bin/mount /DATA/INSPECTION
            sudo /bin/mount /DATA/SAPHIR
            sudo /bin/mount /DATA/CIVAMIS
            sudo /bin/mount /DATA/IMAGES
            sudo /bin/mount /DATA/CHANFREINS
            sudo /bin/mount /DATA/TRAMES
            # On indique à l'utilisateur que le changement de serveur est effectif
            echo "------------------------------"
            echo "Le nouveau serveur est `gawk -F" " '{if ($3 == "svrrx300") print $2}' hosts`"
          else
            echo "------------------------------"
            echo "Le serveur choisi n'est pas actuellement connecté"
            echo "Le changement de serveur n'est pas possible"
          fi
        fi
      else
        # Le dossier est protégé en criture ou il n'y a plus de place
        echo "------------------------------"
        echo "Echec de création du fichier .old"
        echo "Le changement de serveur n'est pas possible"
      fi
    else
      # Le fichier n'existe pas ( pas dans le bon répertoire?!)
      echo "------------------------------"
      echo "Fichier hosts non trouvé"
      echo "Le changement de serveur n'est pas possible"
    fi
    Mon problème est qu'après la boucle while, rang et nom sont vides!!!
    Est-ce que quelqu'un peut m'expliquer pourquoi et m'aider à faire ce script?
    Cordialement,
    jula.
    Promis, avant j'ai cherché sur Google!

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    et tu certain de la bonne affectation §?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        echo $rang" : "$name
          nom[rang]=$name
          rang=rang+1
    je ne suis pas certain dutout que bash ou shell reagisse correctement de cette façon essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        echo $rang" : "$name
          nom[$rang]=$name
          (( rang = $rang + 1 ))
    ....
         ${nom[$choix_svr]}
    .....
       if (( $choix_svr > $rang ))
    .....
        if (( $? == 0  )); then
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

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

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    pour ajouter une valeur à une variable on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    etienne@info1:~ $ aze=1
    etienne@info1:~ $ echo "$aze+1" | bc
    2
    Edit: Effectivement, la méthode de MarcG fonctionne très bien à ce niveau

    je crois qu'il y a une autre méthode ...

    tu devrais essayer de taper ton script dans une console histoire de vérifier que ce que tu fais peut se faire.
    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

  4. #4
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    J'ai changé le code dans la boucle, pour les histoires de $:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    gawk -F" " '{if ($3 == "#svrrx300") print $2;}' hosts |
        while read name
        do
           nom[$rang]=$name
           echo $rang" : "${nom[$rang]}
           (( rang = $rang + 1 ))
        done
    Mais quand je fais un "echo $rang" après le done bah il me rend 0.
    Donc le code est "bon" (mieux que ce que j'avais fait) mais après la boucle ça revient au même et je ne comprends pas pourquoi...
    En tout cas merci déjà pour vos conseils.
    Jula.
    Promis, avant j'ai cherché sur Google!

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    oui normale
    le | de awk de genere un "sous-shell" qui ne peut donc mette a jour ta variable dans le shell ....
    il te reste docn a faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        while read IP name valtest rest
        do
           if [[ $valtest = "#svrrx300" ]]
           then
              nom[$rang]=$name
              echo $rang" : "${nom[$rang]}
             (( rang = $rang + 1 ))
            fi
        done </etc/hosts
    echo $rang
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  6. #6
    Membre régulier Avatar de jula
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Points : 83
    Points
    83
    Par défaut
    MERCI!!
    J'avais pas capté le coup du pipe, c'est bien vu de votre part MarcG!
    Merci beaucoup pour votre aide, et à bientôt pour de nouvelles aventures!
    Jula.
    Promis, avant j'ai cherché sur Google!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [NetBeans IDE for PHP] Affichage du contenu des variables
    Par Beho Double dans le forum NetBeans
    Réponses: 0
    Dernier message: 09/12/2008, 17h40
  2. Contenu des variable invisible dans code source
    Par Invité(e) dans le forum ASP
    Réponses: 16
    Dernier message: 05/06/2008, 14h56
  3. JS - accès aux contenu des variables de session PHP ?
    Par nerick dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/12/2006, 10h48
  4. [VB.NET] Vider le contenu des Variables
    Par linutx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/07/2006, 22h31

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