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. 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.
  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. 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 ;-)