Rechercher : dans
Par :

[PERL] commande pour un débutant

Dernière réponse le 6 jun 2007 à 18:49:01 floxi, le 5 jun 2007 à 18:01:36 
 Signaler ce message aux modérateurs

Bonjour,
voila je cherche à exécuté une commande contenant une variable changeante à l'intérieur d'un foreach.

Ma commande fonctionne si je ne rajoute pas le " cut " de la ligne my $varin.


foreach $VAR (`snmpwalk sd21  -c public  -v 2c Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1`) {

                my $varin = `snmpwalk sd21 -c public -v 2c ifInOctets.$VAR | cut -d " " -f4` ;

                print"$varin\n";
                }


Message d'erreur:
sh: -c: line 1: syntax error near unexpected token `|'
sh: -c: line 1: ` | cut -d " " -f4'
IF-MIB::ifInOctets.10128 = Counter32: 3717836653


Si quelqu'un peut m'aider, c'est mon premier script PERL lol

Merci

Flox
Configuration: Windows XP
Firefox 2.0.0.4

Meilleures réponses pour « [PERL] commande pour un débutant » dans :
Guide d'utilisation du Shell pour débutant VoirSHELL BASH - GUIDE D'UTILISATION - Niveau Débutant Introduction Appel aux membres CCM II. C'est quoi le shell ? III. Comment accéder à la ligne de commande IV. Les consoles virtuelles Exemple : Accéder à la console 3 depuis l'interface...
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Liste des commandes Windows VoirRemarques : Certaines commandes sont dangereuses (l’exemple de SYSKEY) et peuvent causer des problèmes pouvant conduire au formatage. D’autres commandes ne sont pas exécutables sous Windows XP ou des versions antérieures, je ne les ai pas...
Commandes Linux VoirTableau des principales commandes Linux Commande Description équivalent DOS ls liste le contenu d'un répertoire dir cd change de répertoire cd cd .. répertoire parent cd.. mkdir crée un nouveau...
Perl - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Perl - Les fichiers VoirLa notion de filehandle On appelle filehandle (traduisez descripteur de fichier), dans un programme Perl, le nom permettant de manipuler une connexion d'entrée-sortie (les entrées-sorties standards vues précédemment sont connues par les filehandles...

1

lami20j, le 5 jun 2007 à 19:15:58

Salut,

je n'ai pas d'erreur de syntaxe

lami20j@debian:~$ cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;
foreach my $VAR (`snmpwalk sd21  -c public  -v 2c Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1`) {
    my $varin = `snmpwalk sd21 -c public -v 2c ifInOctets.$VAR | cut -d " " -f4` ;
    print"$varin\n";
}
lami20j@debian:~$ perl -cW ccm.pl
ccm.pl syntax OK
que doit faire ton code? lami20j

Répondre à lami20j

2

floxi, le 6 jun 2007 à 08:03:25

Merci de ta réponse,
explication:

En fait voila ce que devrais faire le code , pour chaque interface up d'un switch, afficher uniquement le débit entrant, via la commande snmpwalk.

J'essai en fait de transcrire ce script shell en PERL:

for i in `snmpwalk $host  -c $com -v $vers Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1`  ; do
        varin=`snmpwalk sd21 -c public -v 2c ifInOctets.$i| cut -d " " -f4``

        in=`sh $rep/scriptbc $in+$varin`


done



Si j'enleve du code perl le " | cut -d " " -f4" voila ce que cela ramène:
IF-MIB::ifInOctets.10101 = Counter32: 883735657

IF-MIB::ifInOctets.10102 = Counter32: 4226079414

IF-MIB::ifInOctets.10103 = Counter32: 2947602820

IF-MIB::ifInOctets.10105 = Counter32: 3821959613

IF-MIB::ifInOctets.10106 = Counter32: 852246388

IF-MIB::ifInOctets.10108 = Counter32: 560528995

IF-MIB::ifInOctets.10109 = Counter32: 672882322

IF-MIB::ifInOctets.10110 = Counter32: 247499512

IF-MIB::ifInOctets.10111 = Counter32: 613109941

IF-MIB::ifInOctets.10112 = Counter32: 3541198374

IF-MIB::ifInOctets.10113 = Counter32: 1954398019

IF-MIB::ifInOctets.10114 = Counter32: 2185799660

IF-MIB::ifInOctets.10115 = Counter32: 768

IF-MIB::ifInOctets.10116 = Counter32: 3930895612

IF-MIB::ifInOctets.10117 = Counter32: 2615655947

IF-MIB::ifInOctets.10120 = Counter32: 1084073186

IF-MIB::ifInOctets.10121 = Counter32: 856584858

IF-MIB::ifInOctets.10122 = Counter32: 1845225790

IF-MIB::ifInOctets.10123 = Counter32: 83744505

IF-MIB::ifInOctets.10124 = Counter32: 3057346105

IF-MIB::ifInOctets.10125 = Counter32: 3162132350

IF-MIB::ifInOctets.10127 = Counter32: 3862719933

IF-MIB::ifInOctets.10128 = Counter32: 784908254


Et ce que je désire c'est garder uniquement la dernière valeur

Des idées?

Merci de vos réponses
Flox

Répondre à floxi

3

lami20j, le 6 jun 2007 à 10:17:43

Salut,


En fait voila ce que devrais faire le code , pour chaque interface up d'un switch, afficher uniquement le débit entrant, via la commande snmpwalk.

je pense que tu te compliques un peu

Si tu me donne ce qu'il t'affiche la commande

snmpwalk $host  -c $com -v $vers Ifoperstatus 
et tu me dit ce que tu veux, je pourrai tout parser en Perl sans avoir besoin d'utiliser des commandes Unix (grep, cut, etc).
Sinon, autant le faire en shell.

A toi.

lami20j

Répondre à lami20j

4

floxi, le 6 jun 2007 à 10:50:00

$ snmpwalk sd21 -c public -v 2c Ifoperstatus
IF-MIB::ifOperStatus.1 = INTEGER: up(1)
IF-MIB::ifOperStatus.2 = INTEGER: up(1)
IF-MIB::ifOperStatus.3 = INTEGER: up(1)
IF-MIB::ifOperStatus.4 = INTEGER: up(1)
IF-MIB::ifOperStatus.5 = INTEGER: up(1)
IF-MIB::ifOperStatus.6 = INTEGER: up(1)
IF-MIB::ifOperStatus.10101 = INTEGER: up(1)
IF-MIB::ifOperStatus.10102 = INTEGER: up(1)
IF-MIB::ifOperStatus.10103 = INTEGER: up(1)
IF-MIB::ifOperStatus.10104 = INTEGER: down(2)
IF-MIB::ifOperStatus.10105 = INTEGER: up(1)
IF-MIB::ifOperStatus.10106 = INTEGER: up(1)
IF-MIB::ifOperStatus.10107 = INTEGER: down(2)
IF-MIB::ifOperStatus.10108 = INTEGER: up(1)
IF-MIB::ifOperStatus.10109 = INTEGER: up(1)
IF-MIB::ifOperStatus.10110 = INTEGER: up(1)
IF-MIB::ifOperStatus.10111 = INTEGER: up(1)
IF-MIB::ifOperStatus.10112 = INTEGER: up(1)
IF-MIB::ifOperStatus.10113 = INTEGER: up(1)
IF-MIB::ifOperStatus.10114 = INTEGER: up(1)
IF-MIB::ifOperStatus.10115 = INTEGER: up(1)
IF-MIB::ifOperStatus.10116 = INTEGER: up(1)
IF-MIB::ifOperStatus.10117 = INTEGER: up(1)
IF-MIB::ifOperStatus.10118 = INTEGER: down(2)
IF-MIB::ifOperStatus.10119 = INTEGER: down(2)
IF-MIB::ifOperStatus.10120 = INTEGER: up(1)
IF-MIB::ifOperStatus.10121 = INTEGER: up(1)
IF-MIB::ifOperStatus.10122 = INTEGER: up(1)
IF-MIB::ifOperStatus.10123 = INTEGER: up(1)
IF-MIB::ifOperStatus.10124 = INTEGER: up(1)
IF-MIB::ifOperStatus.10125 = INTEGER: up(1)
IF-MIB::ifOperStatus.10126 = INTEGER: down(2)
IF-MIB::ifOperStatus.10127 = INTEGER: up(1)
IF-MIB::ifOperStatus.10128 = INTEGER: up(1)
IF-MIB::ifOperStatus.14501 = INTEGER: up(1)

Il faut comptabiliser uniquement les interface 10101->10128

merci
Flox

Répondre à floxi

5

lami20j, le 6 jun 2007 à 13:24:46

Ben, il y a une incohérence en ce qui tous demande


IF-MIB::ifInOctets.10128 = Counter32: 784908254

et ça

IF-MIB::ifOperStatus.14501 = INTEGER: up(1)

Il n'y a pas la possibilté d'obtenir un résultat groupé groupé ?

Tu applique la commande snmpwalk sur un résultat d'une commande précedente snmpwalk, c'est un peu rédondant.

Quelque chose de genre (je ne connais pas cette application)
snmpwalk sd21 -c public -v 2c Ifoperstatus -v 2c ifInOctets


lami20j

Répondre à lami20j

6

floxi, le 6 jun 2007 à 14:51:12

Non on ne peut rassembler les deux valeur car il doit y avoir un test :

Si: l'interface est UP (ifoperstatus)
Alors: comptabiliser le traffic ( ifinoctect)


Je pense ne pas etre loin de la solution avec mon script il faut juste résoudre cette petite erreur peut etre des guillment des crochet je ne sais pas et ne trouve pas :
`snmpwalk sd21 -c public -v 2c ifInOctets.$VAR | cut -d " " -f4` ;


Flox

Répondre à floxi

7

floxi, le 6 jun 2007 à 15:38:14

Apparament cela s'avère plus compliqué que je ne le pensait.

Résumé de ce que je cherche une commande perl qui feria ca:
j'ai:

IF-MIB::ifInOctets.10101 = Counter32: 2522564922

IF-MIB::ifInOctets.10102 = Counter32: 3048390914

IF-MIB::ifInOctets.10103 = Counter32: 3037847876

IF-MIB::ifInOctets.10105 = Counter32: 4002527322

IF-MIB::ifInOctets.10106 = Counter32: 858424052


Je shouhaite obtenir cela:
2522564922
3048390914
3037847876
4002527322
858424052
Flox

Répondre à floxi

8

lami20j, le 6 jun 2007 à 15:42:48

Essaie

foreach $VAR (`snmpwalk sd21  -c public  -v 2c Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1`) {
  my $varin = `snmpwalk sd21 -c public -v 2c ifInOctets.$VAR` ;
  $varin =~ s/.*:\s*//;
  print"$varin\n";
}



lami20j

Répondre à lami20j

9

lami20j, le 6 jun 2007 à 15:45:02

Oups, error!
lami20j

Répondre à lami20j

10

floxi, le 6 jun 2007 à 16:19:06

Ca marche,

$varin =~ s/.*:\s*//;


Moi qui fesait que du shell c'est quand meme un peu plus compliqué qu'un "cut" lol.

Un grand merci lami20j Flox

Répondre à floxi

11

lami20j, le 6 jun 2007 à 16:22:58

c'est quand meme un peu plus compliqué qu'un "cut" lol.

c'est compliqué quand on ne sait pas :-))
et c'est facile quand on le sait :-))

Quand j'ai parlé de cut je n'ai pas pensé au simple, mais plutôt à la paresse :-))
Trop de cut quand même.

Voilà une version optimisé (je ne l'ai pas testé, mais pas de cut ou grep shell, le grep que j'utilise c'est une fontion Perl), je vais le tester ce soir chez moi. Je mets en résolu quand même :-)

foreach $VAR ( grep { /(101\d*)\s*=.*up/ } `snmpwalk sd21  -c public  -v 2c Ifoperstatus` ) {
  my $varin = `snmpwalk sd21 -c public -v 2c ifInOctets.$VAR` ;
  print"$varin\n";
}
--
lami20j

Répondre à lami20j

12

 lami20j, le 6 jun 2007 à 18:49:01

Essaie ça

foreach $VAR ( grep { s/.*(101\d*)\s*=.*up.*/$1/ }
    `snmpwalk sd21  -c public  -v 2c Ifoperstatus` ) {
     my $varin = `snmpwalk sd21 -c public -v 2c ifInOctets.$VAR` ;
     print"$varin\n";
}
lami20j

Répondre à lami20j
Collection CommentÇaMarche.net