Home Script shell vicieux
Post
Cancel

Script shell vicieux

J’ai écrit un petit script bash pour interroger des clients pour savoir si un daemon (collectd) est activé sur eux.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
ip="10 11 12 20 30 32 34 35 36 37 38 39"
ip="$ip 40 41 42 43 44 45 46 47 48 49"
ip="$ip 50 51 52 53 54 55 56 57 58 59"

for i in $ip; do
    RESULT=$(snmpget -v2c -d -D ALL -c public 192.168.2.$i .1.3.6.1.4.1.28097.10.9.1.0 | tail -1)
	sleep 1
		if  [ "$RESULT" == "iso.3.6.1.4.1.28097.10.9.1.0 = INTEGER: 2" ]; then
			echo COLLECTD ACTIVATED IN  $i
		else
			 echo NOT ACTIVATED IN $i
		fi
done
exit

Comme vous le voyez c’est assez simple, j’ai une liste d’adresses IP que je parcoure dans une boucle for. Dans la boucle for, je fais un snmpget avec l’OID du daemon qui spécifie si dernier est activé ou désactivé, à fin, j’extraie la dernière ligne qui contient le retour de snmpgetet je fais des conditions.

Commades utilisées

  • tail -1 : extrait la derniere ligne d’un fichier
  • snmpget : lire la MIB sur le produit et renvoyer l’information qui correspondent à l’OID.
    • -v2c : utiliser la version 2 de snmp
    • -d : dump les packets I/O en hexadecimal
    • -D ALL : mode debug extrem verbosity
    • -c public : community string, c’est un peux comme un ID ou un password pour permettre l’accés au informations du client.
    • adresse ip & OID

Mais alors ou est le soucis ?

Le soucis est que ce programme rentre dans la condition if [...] que dans la dernière itération de la boucle ! c’est à dire ip=59
La cause de ça est que snmpget pollue les sortie stderr avec des messages et provoque ça, en redirigeant la sortie stderr vers stdout ou vers un fichier, ça résout le soucis.

1
    RESULT=$(snmpget -v2c -d -D ALL -c public 192.168.2.$i .1.3.6.1.4.1.28097.10.9.1.0 2>&1 | tail -1)


  • 2 : descripteur de fichier pour stderr
  • 1 : descripteur de fichier pour stdout
  • ’>’ oprateur de redirection.
  • & spécifie qu’on redirige la sortie vers un descripteur de fichier.

Voila voila, c'etait chiant !

Redirection shell

1
2
3
4
2>&1 : sterr to stdout 
&> /Dev/NULL: les deux


This post is licensed under CC BY 4.0 by the author.

Driver Linux pour Nokia 5110 LCD (PARTIE 1)

Interface WIFI en Mode Moniteur