Variable vide

Résolu
thierryR51 Messages postés 144 Statut Membre -  
thierryR51 Messages postés 144 Statut Membre -
Bonjour,
Je suis confus de demander de l'aide pour ce problème mais je m'arrache les cheveux sur ce qui devrait être simple.
Voilà ce qui m'amène.
Je lis un fichier et extrait cette ligne:
192.168.1.86 MaMaison
J'en extrait l'IP dans une variable:
oldip=$(grep "MaMaison" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}');

Cette variable est vide.
 echo "Ancienne IP:" $oldip

Si je fais la même chose en dehors du script
grep "MaMaison" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

J'ai bien la bonne réponse.
192.168.1.86
Pourquoi ?



--
Chercheur en améliorations.

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    si l'affichage se fait en dehors du script, la variable a disparu avec la fin du script
    0
    1. thierryR51 Messages postés 144 Statut Membre 8
       
      Pour le test j'ai demandé en 2e ligne le résultat de cette variable. Je suis bien dans le script... Au vu de ta réponse, il semblerait que je n'ai pas fait de faute. Je vais donc creuser plus encore pour comprendre. Merci.
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,
    Si je fais la même chose en dehors du script
    grep "MaMaison" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'

    J'ai bien la bonne réponse.
    Et si tu fais la même chose dans le script sans déclarer la variable, juste la commande ?

    L'IP s'affiche ?
    0
  3. thierryR51 Messages postés 144 Statut Membre 8
     
    J'approche du but. C'est encore ma variable qui est mal lue.
    Quand je mets
     oldip=$(grep "MaMaison" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}');

    Ça marche.
    Si je mets:
     oldip=$(grep "${origine}" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}');

    Ça ne marche pas.
    Si j'enlève les double cotes, ça ne change rien

    Si je fais:
    echo "origine" $origine
    # récupération de l'ancienne IP.
    oldip=$(grep "MaMaison" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}');

    echo "origine "$origine
    echo "Valeur" $oldip;
    exit 0;


    origine MaMaison
    origine MaMaison
    Valeur 192.168.1.86


    et si je fais
    echo "origine" $origine
    # récupération de l'ancienne IP.
    oldip=$(grep "${origine}" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}');

    echo "origine" $origine
    echo "Valeur" $oldip;
    exit 0;

    J'obtiens:
    # sh /home/thierry/Documents/scripts/hosts
    origine MaMaison
    origine MaMaison
    Valeur


    Chercheur en améliorations.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      "${origine}"
      contient bien ce qu'il faut ?
      0
    2. thierryR51 Messages postés 144 Statut Membre 8
       
      Ben oui, j'ai complété le post juste avant pour qu'on y voit plus clair
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > thierryR51 Messages postés 144 Statut Membre
       
      Rajoute
      set -x
      au début de ton script et affiche le résultat.
      0
    4. thierryR51 Messages postés 144 Statut Membre 8
       
      Ça donne ça:
      + echo origine $'MaMaison\r'
      origine MaMaison
      ++ grep $'MaMaison\r' /etc/hosts
      ++ grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'
      + oldip=
      + echo origine $'MaMaison\r'
      origine MaMaison
      + echo Valeur
      Valeur
      + exit 0
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > thierryR51 Messages postés 144 Statut Membre
       
      echo origine $'MaMaison\r'

      Voilà le coupable ;-(((

      Script fait sous Windows (retour chariot).

      Convertit ton script au format Unix (dos2unix) et recommence ;-)
      0