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:
Cette variable est vide.
Si je fais la même chose en dehors du script
J'ai bien la bonne réponse.
192.168.1.86
Pourquoi ?
--
Chercheur en améliorations.
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
-
Contributeurhello
si l'affichage se fait en dehors du script, la variable a disparu avec la fin du script -
ContributeurSalut,
Si je fais la même chose en dehors du script
Et si tu fais la même chose dans le script sans déclarer la variable, juste la commande ?grep "MaMaison" /etc/hosts | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'
J'ai bien la bonne réponse.
L'IP s'affiche ?
-
J'approche du but. C'est encore ma variable qui est mal lue.
Quand je metsoldip=$(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 faisecho "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.-
-
-
Contributeur@thierryR51Rajoute
set -x
au début de ton script et affiche le résultat. -
-
Contributeur@thierryR51
echo origine $'MaMaison\r'
Voilà le coupable ;-(((
Script fait sous Windows (retour chariot).
Convertit ton script au format Unix (dos2unix) et recommence ;-)
-