URL: https://linuxfr.org/forums/programmation-shell/posts/besoin-dun-gros-coup-de-pouce-orientation-projet Title: besoin d'un gros coup de pouce, orientation projet Authors: sdk Date: 2007年05月24日T11:00:44+02:00 Tags: Score: 0 Bonjour à tous, Voici un script qui dans un premier temps lit des adresses mac dans un fichier, puis fait deux requêtes, l'une donne le numéro de port, avec une adresse en décimal, l'autre donne l'addresse en hexadécimal. Je voudrai l'adresse mac en hexa et le numéro de port qui va avec; dans un premier temps la réalisation du script aprés quelques testes amener toujours le même nombres de ligne dans les deux requêtes et la ligne un de la première requête était en corrélation avec la ligne un de la deuxième reqûete . Une fois le programme réalisé et presque mis en production un soucis est survenus (chose apparemment courante), parfois il n'y pas le même nombres de lignes j'ai donc le droit à une erreur et certainement que tout est faussé. Donc l'idée est de comparer soit comparer le debut de chaque ligne des deux fichiers est ne l'afficher que si ce sont bien les mêmes. Ou mais alors là je ne vois pas du tout et ne sais pas du tout si c'est réalisable convertir dans chaque ligne l'adresse décimal en héxa, ce qui ne fairai qu'utiliser qu'une requête est éviterai les erreurs lors de l'éxecution. Place aux éléments concret : les deux fichiers aprés requêtes une requête : extrait fichier1 héxa et déci SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.169.136.214 "00 00 48 A9 88 D6 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.171.21.223 "00 00 48 AB 15 DF " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.171.21.243 "00 00 48 AB 15 F3 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.87.1 "00 00 48 AD 57 01 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.87.67 "00 00 48 AD 57 43 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.87.74 "00 00 48 AD 57 4A " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.87.83 "00 00 48 AD 57 53 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.88.7 "00 00 48 AD 58 07 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.88.54 "00 00 48 AD 58 36 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.88.181 "00 00 48 AD 58 B5 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.88.253 "00 00 48 AD 58 FD " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.89.126 "00 00 48 AD 59 7E " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.173.90.3 "00 00 48 AD 5A 03 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.180.49.16 "00 00 48 B4 31 10 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.180.50.12 "00 00 48 B4 32 0C " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.180.50.41 "00 00 48 B4 32 29 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.180.50.47 "00 00 48 B4 32 2F " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.183.133.169 "00 00 48 B7 85 A9 " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.72.183.136.10 "00 00 48 B7 88 0A " SNMPv2-SMI::mib-2.17.4.3.1.1.0.0.116.128.32.28 "00 00 74 80 20 1C " SNMPv2-SMI::mib-2.17.4.3.1.1.0.1.3.16.165.239 "00 01 03 10 A5 EF " extrait fichier2 port ad déci : SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.169.136.214 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.171.21.223 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.171.21.243 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.87.1 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.87.67 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.87.74 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.87.83 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.88.7 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.88.54 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.88.181 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.88.253 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.89.126 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.173.90.3 25 SNMPv2-SMI::mib-2.17.4.3.1.2.0.0.72.180.49.16 25 Le programme qui devient une usine à gaz : #On en deduit le nombre de switch nb_switchs=$i #On efface les (ex) logs if [ -f result.txt ]; then £spaces£ £/spaces£rm result.txt fi rm repd.txt rm reph.txt rm repdcf1.txt rm rephcf1.txt touch repd.txt touch reph.txt touch result.txt # # £spaces£ £/spaces£for switch in `seq 1 $nb_switchs` £spaces£ £/spaces£do £spaces£ £/spaces£#On recupere l'ip du switch £spaces£ £/spaces£ip_switch=${ip[$switch]} £spaces£ £/spaces£echo "switch $ip_switch" £spaces£ £/spaces£#On recupere les reponses des 2 questions (changer les oids suivant votre equipements!!) £spaces£ £/spaces£snmpwalk -c public -v 2c $ip_switch .1.3.6.1.2.1.17.4.3.1.2.0 >> repd.txt £spaces£ £/spaces£snmpwalk -c public -v 2c $ip_switch .1.3.6.1.2.1.17.4.3.1.1 >> reph.txt £spaces£ £/spaces£sleep 1 £spaces£ £/spaces£cut -d' ' -f1 repd.txt >> repdf1.txt £spaces£ £/spaces£cut -d' ' -f1 reph.txt >> rephf1.txt £spaces£ £/spaces£#On remplace l'espace entre le num de port et ce qui precede par deux espaces. £spaces£ £/spaces£sed 's/ / /g' -i repd.txt £spaces£ £/spaces£#cmp [ repdf1.txt -ne rephf1.txt ]; then £spaces£ £/spaces£#echo "il y a probleme reexecution du script dans quelque instant" £spaces£ £/spaces£#./port_mac4.sh £spaces£ £/spaces£#else £spaces£ £/spaces£#On lit le fichier repd.txt £spaces£ £/spaces£#Traitement des donnees recuperation ports puis adresses mac £spaces£ £/spaces£i=1 £spaces£ £/spaces£while read ligne £spaces£ £/spaces£do £spaces£ £/spaces£port[$i]=${ligne: -3} £spaces£ £/spaces£i=`expr $i + 1` £spaces£ £/spaces£done < repd.txt £spaces£ £/spaces£#On lit le fichier reph.txt £spaces£ £/spaces£i=1 £spaces£ £/spaces£while read ligne £spaces£ £/spaces£do £spaces£ £/spaces£mac[$i]=${ligne: -19} £spaces£ £/spaces£mac_tmp=${mac[$i]} £spaces£ £/spaces£mac[$i]=${mac_tmp:0:17} £spaces£ £/spaces£i=`expr $i + 1` £spaces£ £/spaces£done < reph.txt £spaces£ £/spaces£nb_entrees=`expr $i - 1` £spaces£ £/spaces£#On parcours le tableau des ports afin d'eviter le spanning tree £spaces£ £/spaces£for i in `seq 1 $nb_entrees` £spaces£ £/spaces£do £spaces£ £/spaces£port_affiche[$i]=1 £spaces£ £/spaces£for j in `seq 1 $nb_entrees` £spaces£ £/spaces£do £spaces£ £/spaces£if [ $j -ne $i ]; then £spaces£ £/spaces£tmp_port1=${port[$j]} £spaces£ £/spaces£echo "port1:$tmp_port1" £spaces£ £/spaces£tmp_port2=${port[$i]} £spaces£ £/spaces£echo "port2:$tmp_port2" £spaces£ £/spaces£if [ $tmp_port1 -eq $tmp_port2 ]; then £spaces£ £/spaces£port_affiche[$i]=0 £spaces£ £/spaces£fi £spaces£ £/spaces£fi £spaces£ £/spaces£done £spaces£ £/spaces£done £spaces£ £/spaces£#On affiche les ports etant unique les reponses seront dans result.txt £spaces£ £/spaces£for i in `seq 1 $nb_entrees` £spaces£ £/spaces£do £spaces£ £/spaces£affiche=${port_affiche[$i]} £spaces£ £/spaces£if [ $affiche -eq 1 ]; then £spaces£ £/spaces£NPort=`expr ${port[$i]} % 32` £spaces£ £/spaces£BS=`expr ${port[$i]} / 32` £spaces£ £/spaces£TBS=`expr $BS + 1` £spaces£ £/spaces£echo "BS : $TBS Port : $NPort IP Port en serie : ${port[$i]} switch : $ip_switch MAC : ${mac[$i]}" >> result. txt £spaces£ £/spaces£fi £spaces£ £/spaces£done £spaces£ £/spaces£#fi £spaces£ £/spaces£done Les deux cut -d' ' -f1 repd.txt; vont me permettre de récupérer les deux premières parties qui m'intérresse, juste aprés je pensais faire une boucle qui puisse vérifier si sur chaqu'une des lignes les caractères corespondent et en faire dépendre l'affichage finale, ne pas utiliser les informations si elles différent .... enfin je suis totalement perdu si quelqu'un peut éclaircir le problème ce serait vraiment génial. Merci ...

AltStyle によって変換されたページ (->オリジナル) /