Variable vide

Résolu
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. 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.
    1. Contributeur
      "${origine}"
      contient bien ce qu'il faut ?
    2. Ben oui, j'ai complété le post juste avant pour qu'on y voit plus clair
    3. Contributeur
      @thierryR51Rajoute
      set -x
      au début de ton script et affiche le résultat.
    4. Ç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
    5. Contributeur
      @thierryR51
      echo origine $'MaMaison\r'

      Voilà le coupable ;-(((

      Script fait sous Windows (retour chariot).

      Convertit ton script au format Unix (dos2unix) et recommence ;-)
  2. Contributeur
    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 ?
    1. Contributeur
      hello
      si l'affichage se fait en dehors du script, la variable a disparu avec la fin du script
      1. 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.