2017-07-18 62 views
-1

我正在提取接口的IP地址,並使用該地址的第3個字節作爲BGP AS號的一部分。我需要的數目之前插入一個0,如果第三個八位位組是< 10. 例如,如果第三個八位字節= 8 然後 BGP AS = 111插入字符Cisco IOS EEM腳本

這是我的當前和未完成的小程序。

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" 

回答

1

這裏最簡單的方法是使用format以及正確的格式化順序。 (如果你曾經在C中使用sprintf(),你就會明白什麼format命令不直了。除Tcl命令沒有與緩衝區溢出或其他棘手位像任何問題。)

# 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" 

這裏的關鍵是%02d會在寬度爲2的零填充(0)字段(2)中格式化(%)十進制數(d)。在它前面有一個字面652(沒有%那麼直接)。

如果你願意,你可以把上面的代碼轉換成一行代碼,但是我認爲把它寫成兩個代碼要清晰得多(編寫不明確的代碼真的沒有什麼好的藉口,因爲它會讓你的生活更加困難,實際上並沒有花太多時間在第一時間寫清楚):

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