2017-07-18 12 views
-1

Je suis en train d'extraire l'adresse IP d'une interface et d'utiliser le troisième octet de cette adresse comme partie du numéro de l'AS BGP. Je dois insérer un 0 avant le numéro si le 3ème octet est < 10. Par exemple, si 3 octet = 8 puis AS = BGE 111Caractère d'insertion du script EEM de Cisco IOS

Voici mon applet actuelle et inachevée.

event manager applet replace 
event none 
action 1.0 cli command "conf t" 
action 1.1 cli command "do show ip int brief vlan 1" 
action 1.2 regexp " [0-9.]+ " $_cli_result ip match 
action 2.0 regexp {([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)} $_cli_result match ip 
action 2.1 regexp {([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)} $ip match first second third forth 
action 2.2 set vl1 $first.$second.$third.$forth 
action 2.3 cli command "router bpg 111$third" 

Répondre

1

La méthode la plus simple est d'utiliser ici format avec la séquence de mise en forme à droite. (Si vous avez déjà utilisé sprintf() en C, vous comprendrez ce que la commande ne format de droite. À l'exception de la commande Tcl n'a pas de problèmes avec des dépassements de tampons ou autres bits difficiles comme ça.)

# Rest of your script unchanged; I'm lazy so I'll not repeat it here 
set bpg [format "652%02d" $third] 
action 2.3 cli command "router bpg $bpg" 

La clé ici est que %02d fait le formatage (%) d'un nombre décimal (d) dans un champ zéro-rembourré (0) de largeur deux (2). Et il y a un littéral 652 en face de lui (pas de % si littérale).

Vous pouvez rouler le dessus en une seule ligne si vous voulez, mais je pense qu'il est beaucoup plus clair de l'écrire en deux (il n'y a vraiment aucune bonne excuse pour écrire du code flou, car cela vous rend la vie plus difficile ne prend pas vraiment beaucoup moins de temps pour écrire clairement en premier lieu):

action 2.3 cli command "router bpg [format 652%02d $third]"