#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)
#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..
#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)
#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
#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
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
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.....
#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)
#11 Le 04/11/2011, à 13:13
- pingouinux
Re : [résolu] script relevé automatique compteurs imprimantes
Bonjour,
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.