Variable vide

Résolu
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   -  
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   -
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 ?


A voir également:

3 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
si l'affichage se fait en dehors du script, la variable a disparu avec la fin du script
0
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
"${origine}"
contient bien ce qu'il faut ?
0
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   8
 
Ben oui, j'ai complété le post juste avant pour qu'on y voit plus clair
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430 > thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention  
 
Rajoute
set -x
au début de ton script et affiche le résultat.
0
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430 > thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention  
 
echo origine $'MaMaison\r'

Voilà le coupable ;-(((

Script fait sous Windows (retour chariot).

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