Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/03/2009, à 15:56

mixout

[résolu] script relevé automatique compteurs imprimantes

Bonjour

Alors que je ne connais RIEN en programmation, je me suis mis en tête de créer un utilitaire qui a pour but de récuperer automatiquement , via SNMP, certaines données de matériels compatibles SNMP.

pour l'instant, je teste un truc permettant de recuperer la valeur "compteur de pages" d'imprimantes compatibles.
voilà ce qui fonctionne pour l'instant:

 snmpget -v1 -c public 192.168.82.21 mib-2.43.10.2.1.4.1.1
SNMPv2-SMI::mib-2.43.10.2.1.4.1.1 = Counter32: 53880

53880 est bien la valeur actuelle du compteur, 192.168.82.21 est l'adresse de l'imprimante, jusqu'ici tout va bien.

ce que je cherche à faire, c'est

snmpget -v1 -c public [une valeur d'adresse extraite d'un fichier texte] [une OID extraite d'un fichier texte]

puis (avec awk ?) extraire uniquement la valeur résultante (et non pas la ligne complete du retour de snmpget)

ce qui rendrait ce petit script beaucoup plus générique et facile à utiliser

le résultat devrait etre un fichier texte formaté comme ceci

OID1 [tab] OID2 [tab] OID3.....

par exemple

nom_imprimante    lieu     adresse_IP       compteur_actuel

EDIT: Je poste ici le script au complet "documenté". corrigez-moi si j'ai écrit des bétises

#!/bin/sh
Fichier=/home/mixout/liste_imprimantes   #le fichier "source", 
while read ligne # je vois bien ce que ça fait mais je ne sais pas l'expliquer exactement...:/
do
IP=`awk '{print $1}' <<< $ligne'                               # on prend le premier champ ($1) de la premiere ligne du fichier liste_imprimantes.txt et on le met dans la variable IP
SERIAL=`awk '{print $2}' <<< $ligne'                      # on prend le deuxième champ ($2) de la premiere ligne du fichier liste_imprimantes.txt et on le met dans la variable SERIAL 
COMPTEUR=`awk '{print $3}' <<<$ligne'               # idem pour le champ 3
MODELE=`awk '{print $4}' <<<$ligne'                    # idem, vous suivez, au fond ? 
echo $IP $(snmpget -v1 -c public $IP $MODELE $SERIAL $COMPTEUR | awk '{print $NF}' | sed -r 's/ +/\t\t/g; s/"//g'
# on affiche l'adresse ip (le contenu de la variable$IP) puis le résultat de la commande snmpget avec pour arguments l'adresse IP(évidemment) et les OID suivants : modele,serial, compteur puis on les redirige dans awk qui ne prend que le dernier champ du résultat ($NF) puis on redirige dans sed qui met en forme en remplaçant les espaces(quel que soit leuur nombre) par                          deux tabulations(\t\t) puis(vous suivez toujours ?)encore un coup de sed qui remplace les guillements par ..rien
done < $Fichier > compteurs.txt                           # on fait tourner cette boucle sur le contenu de la variable $Fichier (ici: liste_imprimantes.txt) et on redirige la sortie vers le fichier compteurs.txt

Dernière modification par mixout (Le 05/11/2011, à 09:53)

Hors ligne

#2 Le 06/03/2009, à 16:03

iuchiban

Re : [résolu] script relevé automatique compteurs imprimantes

Avec un fichier :
<UneImprimante> <UneAdresseIP> <UneMIB>
<UneAutreImprimante><UneAutreAddIP> <UneAutreMIB>
<etc.> <etc.> <etc.>

Fichier = <CheminDuFichierDeLog>

while read ligne
do
NomImpr= cat $ligne | awk '{print $1}'
AddrIP = cat $ligne | awk '{print $2}'
MIB = cat $ligne | awk '{print $3}'
echo $NomImpr"\t"$AddrIP"\"$(snmpget -v1 -c public $AddrIP $MIB | awk '{print $NF}') >> Fichier
done < <TonFichier.txt>

C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#3 Le 06/03/2009, à 16:18

mixout

Re : [résolu] script relevé automatique compteurs imprimantes

merci beaucoup !
je teste..

Hors ligne

#4 Le 06/03/2009, à 17:13

mixout

Re : [résolu] script relevé automatique compteurs imprimantes

#!/bin/bash
Fichier=/home/mixout/compteur_imprimantes.log
while read ligne
do
NomImpr = cat $ligne | awk '{print $1}'
AddrIP  = cat $ligne | awk '{print $2}'
OID     = cat $ligne | awk '{print} $3'
echo $NomImpr"\t"$AddrIP"\"$(snmpget -v1 -c public $AddrIP $OID | awk '{print $NF}')" >> $Fichier
done < liste_imprimantes.txt

j'obtiens des erreurs

./script_snmp.sh: line 5: NomImpr: command not found
./script_snmp.sh: line 6: AddrIP: command not found
./script_snmp.sh: line 7: OID: command not found

mais je crois savoir ce qui ne va pas:

comment le script sait-il quel est le fichier en "entrée" ? on ne lui dit qu'a la fin...

Dernière modification par mixout (Le 06/03/2009, à 17:13)

Hors ligne

#5 Le 06/03/2009, à 17:19

mixout

Re : [résolu] script relevé automatique compteurs imprimantes

...je n'abandonne pas l'affaire mais là il faut que j'y aille

je vais essayer de me trouver un bon petit PDF sur la programmation bash
parce ce que il n'y a pas de raison que je ne comprenne pas ce que je fais, non mais smile

Hors ligne

#6 Le 06/03/2009, à 18:36

AnsuzPeorth

Re : [résolu] script relevé automatique compteurs imprimantes

Ca ne fonctionne pas car les variables ne sont pas déclarées comme il faut en bash.

NomImpr = cat $ligne | awk '{print $1}'
#plutot
NomImpr=$(cat $ligne | awk '{print $1}')

La commande 'cat' n'est pas appropriée; elle sert à lire un fichier, et dans ce cas precis, c'est une variable qui est lue.

while read ligne  #variable
do
NomImpr = cat $ligne | awk '{print $1}'
# Il aurait fallu utiliser un echo

Tu peux aussi supprimer une commande.

# A la place de
NomImpr=$(echo $ligne | awk '{print $1}')
# <<< remplace le echo
NomImpr=$(awk '{print $1}' <<< $ligne)

Par contre, comme le délimiteur n'est pas précisé pour awk, il ne faut pas qu'il y est d'espaces dans les différents champs de ton fichier liste_imprimantes.txt.

Si je dis des bêtises, n'hésitez pas smile

Dernière modification par AnsuzPeorth (Le 06/03/2009, à 18:36)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#7 Le 06/03/2009, à 18:47

AnsuzPeorth

Re : [résolu] script relevé automatique compteurs imprimantes

mixout a écrit :

comment le script sait-il quel est le fichier en "entrée" ? on ne lui dit qu'a la fin...

Une redirection est utilisé <

while read ligne
do
done < fichier.txt

#pareil
cat fichier.txt | while read ligne
do
done

Regarde dans ma signature, abs-traduc, ca peut paraître un gros pavé, mais y'a presque tout et on s'y retrouve bien finalement !


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#8 Le 14/10/2011, à 17:59

guylegras

Re : [résolu] script relevé automatique compteurs imprimantes

Bjr a tous, j'ai une içmprimante EPSON DX4850 qui bloque cartouches pleines. Je cherche un logiciel ou autre pour remettre à 0 le compteur.
Merci à l'avance.

Hors ligne

#9 Le 04/11/2011, à 12:27

mixout

Re : [résolu] script relevé automatique compteurs imprimantes

Bonjour

je reprends ce trés vieux topic, aprés tout, c'est le mien...
tout d'abord, un grand merci à AnzusPeoyrth et iushiban pour votre aide !
voilà ou j'en suis:
mon fichier compteurs.sh

#!/bin/bash
Fichier=/home/mixout/liste_imprimantes
while read ligne
do
IP=`awk '{print $1}' <<< ligne`
SERIAL=`awk '{print $2}' <<< ligne`
COMPTEUR=`awk '{print $3}' <<< ligne`
MODELE=`awk '{print $4}' <<< ligne`
echo $IP $(snmpget -v1 -c public $IP $MODELE $SERIAL $COMPTEUR | awk '{print $NF}') >> compteurs.txt 
done < $Fichier

la suite arrive.....

Hors ligne

#10 Le 04/11/2011, à 12:33

mixout

Re : [résolu] script relevé automatique compteurs imprimantes

un extrait de mon fichier liste_imprimantes.txt

192.168.55.22  1.3.6.1.2.1.43.5.1.1.17.1.1  1.3.6.1.2.1.43.10.2.1.4.1.1  1.3.6.1.2.1.25.3.2.1.3.1

le fichier résultant - compteurs.txt  (voir topic au dessus) est pas mal, mais pas exactement ce que je souhaite.
En effet, snmpget me retourne des valeurs entourées de guillements (c'est comme ceci que sont rentrés ces valeurs dans la MIB des machines, je n'y peux rien
voici un aperçu de ce fichier

192.168.55.22  4100NL"  "S4609688365"  3588
autre adresse ip, etc...

j'ai besoin d'un petit coup de pouce:
comment "reformater" le fichier texte (compteurs.txt) pour
1- remplacer les espaces par une tabulation (automatiquement bien sur)
2- effacer tous les guillemets inutiles
3- ...pour pouvoir utiliser sans trop de peine t2html afin de fournir aux personnes concernées un état des compteurs en temps réel
? ?

Dernière modification par mixout (Le 04/11/2011, à 12:41)

Hors ligne

#11 Le 04/11/2011, à 13:13

pingouinux

Re : [résolu] script relevé automatique compteurs imprimantes

Bonjour,

mixout #10 a écrit :

comment "reformater" le fichier texte (compteurs.txt) pour
1- remplacer les espaces par une tabulation (automatiquement bien sur)
2- effacer tous les guillemets inutiles

sed -r 's/ +/\t/g;s/"//g' fichier_d_entree >fichier_de_sortie

Ajouté :
Les 2 dernières lignes du script peuvent être remplacées par :

echo $IP $(snmpget -v1 -c public $IP $MODELE $SERIAL $COMPTEUR | awk '{print $NF}') | sed  -r 's/ +/\t/g;s/"//g'
done < $Fichier >compteurs.txt

ou

echo $IP $(snmpget -v1 -c public $IP $MODELE $SERIAL $COMPTEUR | awk '{print $NF}')
done < $Fichier | sed  -r 's/ +/\t/g;s/"//g' >compteurs.txt

Dernière modification par pingouinux (Le 04/11/2011, à 13:42)

Hors ligne

#12 Le 04/11/2011, à 15:02

mixout

Re : [résolu] script relevé automatique compteurs imprimantes

merci !
ça fonctionne parfaitement
j'ai utilisé ton premier exemple en le modifiant

echo $IP $(snmpget -v1 -c public $IP $MODELE $SERIAL $COMPTEUR | awk '{print $NF}') | sed  -r 's/ +/\t\t/g;s/"//g'
done < $Fichier >compteurs.txt

pour des raisons de facilité de lecture.
En effet le fichier des imprimantes comporte des adresses IP dans différents réseaux/classes (2 ou 3 digits)

je vais mettre en résolu et éditer mon premier post avec le script au complet. ça pourra surement servir à d'autres.

Hors ligne