A voir également:
- Problème concaténation bash
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
5 réponses
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
Si c'est sensé valoir "toto=", il faudrait plutôt écrire ${NMAPTARGETS}
Bonne chance
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.
$NMAPTARGETS$=toto
Le script permet dans changer les variables d'un fichier.
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...
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
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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