2015-01-26 1 views
0

마지막으로 며칠 동안 내 문제를 해결하려고합니다. 그래서 마침내 여기에 왔습니다.tclsh에서 쉘 스크립트로의 출력을 기대합니다.

리눅스/데비안 시스템에서 열어야하는 Tcl 스크립트를 작성해야합니다. 문제는 스크립트가 시스코 라우터에 로그인 한 다음 txload를 나타내는 SNMP 값을 가져와야하는 특수 tclsh 모드로 들어가야한다는 것입니다. 잠시 후 (SNMP를 지원하는) tclsh 모드에서 값을 얻지 만 스크립트로 되돌릴 수는 없습니다. 라우터 tclsh 모드에서만 계속 존재합니다. 내 스크립트는 이미 tclsh에있는 값에 따라 다른 값을 변경해야하지만 tclsh는 더 이상 필요하지 않습니다.

그래서 여기 내 질문 : tclsh에서 $ifnum 값을 어떻게 얻을 수 있습니까?하지만 일부 루프를 만들 때 스크립트를 사용할 수 있습니다. 왜냐하면 $ifnum이 조건이 될 수있는 루프를 만들어야하기 때문입니다. 당신이 볼 수 있듯이

는 스크립트가 아직 완료되지 않습니다,하지만 말했듯이, 난 여기 갇혀있어하고 시도하는 것은 그것을 알아 내기 위해 :

#!/usr/bin/expect -f 

set gateway [lindex $argv 0] 
set serial [lindex $argv 1] 
set timeout 5 

spawn telnet $gateway 
expect "Password:" 
send "cisco\r" 
expect "*>" 
send "en\r" 
expect "Password:" 
send "cisco\r" 
expect "*#" 
send "set ifnumstr \[snmp_getone odczyt 1.3.6.1.4.1.9.2.2.1.1.24.6\]\r" 
expect "*}" 
send "regexp \{val='(\[0-9\]*)'\} \$ifnumstr \{\} ifnum \r" 
expect "*#" 
send "puts \$ifnum \r" 
expect "*#" 

답변

0

내가이 물건을 인쇄 할 거라고 마커 사이를 찾고 다시 일치 모드에서 expect을 사용하여 값을 가져옵니다.

send "puts \"if\\>\$ifnum<if\"\r" 
expect -re {if>(.*?)<if} 
# Save the value in a variable in the *local* script, not the remote one 
set ifnum $expect_out(1,string) 
관련 문제