Problème concaténation bash

papaa19 -  
mamiemando Messages postés 33228 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,

5 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
  2. 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
  3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
  4. 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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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