|
|
|
|
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";
}
sh: -c: line 1: syntax error near unexpected token `|' sh: -c: line 1: ` | cut -d " " -f4' IF-MIB::ifInOctets.10128 = Counter32: 3717836653
Configuration: Windows XP Firefox 2.0.0.4
Salut,
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 |
Merci de ta réponse,
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 |
Salut,
snmpwalk $host -c $com -v $vers Ifoperstatuset 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
|
Ben, il y a une incohérence en ce qui tous demande
|
Non on ne peut rassembler les deux valeur car il doit y avoir un test :
|
c'est quand meme un peu plus compliqué qu'un "cut" lol.
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 |