Exécution de commande avec back quotes et variables...

Résolu/Fermé
floo - 11 juin 2015 à 15:25
 Floo - 11 juin 2015 à 18:19
Bonjour à tous,

J'ai une question simple, mais je galère depuis bientôt 24h sur ce sujet, cela me pourrit la vie, à moins qu'il n'y ai une autre solution...

je souhaite récupérer via un script, dans une variable, le résultat de la commande suivante shell suivante:

grep -c '"$svc_prov'" forti_svc.txt

Dans le script que j'ai je galère avec une commande de la sorte:

statu_svc=`"grep -c '\"$svc_prov\"' forti_svc.txt"`

Lors de l'éxécution je rencontre une erreur:
./main_rules.sh: line 113: grep -c '"https"' forti_svc.txt: command not found

Alors que cela correspond exactement à la commande que je souhaite exécuter (et qui fonctionne quand on la passe dans le shell).

L'utilisation des quotes simples et double autour de la variable servent à empecher que "httpss" soit trouvé dans le résultat. Je souhaite trouver uniquement "https" avec les guillemets.

voila voila, je pense que c'est un problème de back/simple/double quotes, donc s'il y a des yeuxet cerveaux avertis...et bien merci!
A voir également:

3 réponses

grep -c '"$svc_prov"' forti_svc.txt
  • faute de frappe: c'est bien cela que je souhaite : double quotes entourées des simples quotes
0
chris79 Messages postés 91 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
Modifié par chris79 le 11/06/2015 à 15:53
Salut,

Tu peux soit effectivement utiliser les quotes ` ` pour récupérer un résultat :

res=`<maCommande>` 


Ou utiliser, et c'est plus simple, la forme suivante avec parenthèses :

res=$(<maCommande>)
0
Merci!
J'ignorai que l'on pouvait ne pas mettre de back quotes dans la 2e solution.
Par contre j'ai donc cela dans mon script du coup :
statu_svc=$(grep -c '\"$svc_prov\"' forti_svc.txt)
mais lors de l'éxécution le contenu de ma variable n'est pas pris en compte à cause des simples quotes entourant le reste (je crois)...et là je coince encore! :(
0
chris79 Messages postés 91 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
11 juin 2015 à 16:29
Peux-tu donner un extrait de ton fichier forti_svc.txt ainsi que le contenu exact de $svc_prov ?
Ce sera plus simple ;)
0
PAs de soucis :)

$svc_prov est situé dans une boucle et récupère un à un des noms de ports réseau sans guillemets de type http https ou bien encore smi-s-5989.

forti_svc.txt contient une configuration de firewall dans laquelle je souhaite voir s'il trouve les services récupéré précédemment.

extrait de forti_svc.txt:
edit "smi-s-5989"
edit "smi-s-5988"
...

Je souhaite que smi-s-598 renvoi 0 --> pas de correspondance
mais que smi-s-5989 renvoi 1 et smi-s-5988 aussi.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 juin 2015 à 16:31
hello
qu'est ce qui est recherché ?
exactement "$svc_prov" ou le contenu de la variable svc_prov
0
C'est le contenu de la variable qui m'intéresse, mais dans le terme exact :

extrait de forti_svc.txt:
edit "smi-s-5989"
edit "smi-s-5988"
...

Je souhaite que smi-s-598 renvoi 0 --> pas de correspondance
mais que smi-s-5989 renvoi 1 et smi-s-5988 aussi.

du coup j'ai tenté de mettre des quotes un peu dans tous les sens...mais il y a peu etre plus simple ? :)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
11 juin 2015 à 16:59
sans ou avec les "
statu_svc=$(grep -c "$svc_prov" forti_svc.txt) 
statu_svc=$(grep -c "\"$svc_prov\"" forti_svc.txt)
0
Nickel ! La 2e solution est la bonne ! Merci!

commande:
statu_svc=$(grep -c "\"$svc_prov\"" forti_svc.txt)
affichage du debug :
grep -c '"tcp_902-903"' forti_svc.txt
statu_svc=1

alors que dans mon fichier j'en ai bien 2 qui auraient pu correspondre sans les bonnes quotes:

grep "tcp_902-903" forti_svc.txt
edit "tcp_902-903"
edit "tcp_902-9033"


Merci messieurs pour votre aide, je vais enfin le finir ce foutu script ;)
(passer d'une marque de firewall à une autre quand aucune aide n'est fournie...)
0
chris79 Messages postés 91 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
Modifié par chris79 le 11/06/2015 à 17:16
dubcek a été plus rapide ;)

Je rajouterai que si tu utilises de simple quotes, ta variable n'est plus interprétée ;)
Ex avec echo :

toto="bonjour"
echo "$toto" # affiche "bonjour"
echo '$toto' # affiche "$toto"
0
Yes, c'est l'enchainement des quotes qui ne m'est pas forcement familier dans son fonctionnement, mais pour n'en utiliser qu'une c'est toujours bon a rappeller :)
0