Problème concaténation bash

papaa19 -  
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je suis de créer un petit programme simple permettant de configurer un logiciel, cependant il s'avère que je tombe sur un problème que je ne comprends pas vraiment. Peut-être la fatigue ^^

Bref, le soucis est le suivant :

J'utilise une boucle pour configurer plusieurs fois la même chose. Enfait, c'est une adresse IP que je rajoute à la fin d'une ligne. Et la boucle permet d'ajouter l'adresse à la fin à chaque fois tant que l'utilisateur le souhaite. J'ai donc utilisé une variable pour préciser le début de la ligne, cependant, il me dit que j'ai un problème de concaténation quand j'utilise cette variable, je ne vois plus comment faire....

voici le code : http://ww1.sourcepod.com/?subid1=b14dc6c2-49c4-11ea-9184-a2ca817043b0
En surligné jaune, c'est là que ça bug..

Si quelqu'un peut m'aider

Merci d'avance,
A voir également:

5 réponses

mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
A priori les "$NMAPTARGETS$=" et de manière générale toutes les variables entourées de "$" sont suspectes. En admettant que $NMAPTARGETS$ vaille "toto" que devrait valoir "$NMAPTARGETS$=" ?

Si c'est sensé valoir "toto=", il faudrait plutôt écrire ${NMAPTARGETS}

Bonne chance
0
papaa19
 
Si $NMAPTARGETS$ vaut "toto" alors il faut qu'il y ait écrit dans le fichier :

$NMAPTARGETS$=toto

Le script permet dans changer les variables d'un fichier.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

cependant, il me dit que j'ai un problème de concaténation quand j'utilise cette variable
Quel est le message d'erreur exact qui s'affiche ?

Peux-tu rajouter après le shebang set -x et regarder comment sont interprétées tes variables, à défaut de comprendre colles-nous ici le résultat, on essaiera d'analyser ça...

#!/bin/bash

#script pour configurer

set -x 

0
papaa19
 
Le message d'erreur exact est : sed: -e expression #1, char 40: unknown option to 's'

Voilà les résultat du set -x :

J'ai rentré l'adresse réseau 10.10.10.10/24 et voilà :

+ sudo sed -i 's/\($NMAPTARGETS$=\).*/\110.10.10.10\/24/' /usr/local/shinken/etc/resource.cfg
+ echo -e '\n\tVous avez ajouté l'\''adresse réseau 10.10.10.10/24.\n'

La variable i devient :

+ i='$NMAPTARGETS$=10.10.10.10/24'

Après je rajoute une adresse IP (8.8.8.8) et voilà ce qui se passe :

+ sudo sed -i 's/\($NMAPTARGETS$=10.10.10.10/24 \).*/\18.8.8.8/' /usr/local/shinken/etc/resource.cfg
sed: -e expression #1, char 39: unknown option to 's'

+ echo -e '\n\tVous avez ajouté l'\''adresse IP 8.8.8.8.\n'

La variable i devient :
+ i='$NMAPTARGETS$=10.10.10.10/24 8.8.8.8'

C'est bien ce que je souhaite...
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Le problème c'est le slash dans "$NMAPTARGETS$=10.10.10.10/24" ;-((

Remplace le délimiteur par défaut de sed comme ceci :

sed -i 's/#($NMAPTARGETS$=\).*#\1'$target'/'$mask'#' 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
Ben vu que $ est un métacaractère en shell et dans sed, à mon avis si on parle vraiment du caractère $ il faut rajouter des \ pour échapper ce caractère (au moins \$ si ce n'est pas \\$).

Car sinon shell peut croire qu'on parle du contenu de la variable $NMAPTARGETS suivi du contenu de la variable $= (qui n'ayant pas de sens doit être compris comme le caractère $ suivi de =). Et en sed "$=" ça veut dire que derrière le caractère fin de ligne on s'attend à trouver le caractère =, ce qui n'est a priori pas ce que tu veux écrire....

Bonne chance
0