Problème concaténation bash

Fermé
papaa19 - Modifié par mamiemando le 5/06/2013 à 21:17
mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 - 5 juin 2013 à 21:20
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,

5 réponses

mamiemando Messages postés 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
4 juin 2013 à 21:44
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
5 juin 2013 à 09:31
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
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
5 juin 2013 à 18:23
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 33357 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 novembre 2024 7 799
5 juin 2013 à 21:20
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