bash와 같은 스크립트에서 기대합니까?

“show version”명령 출력을 포착하기 위해 .csv 파일에서 IP 주소를 가져오고 장치를 텔넷하는 스크립트를 코딩하려고합니다.

지금까지 코드를 작성했습니다.

#!/bin/bash #!/usr/bin/expect -f FILE1=dispositivos.csv #file with IP"s and device name set Username "user" #this is the user for telnet connection. set Password "this.is.the.pass" #pass for telnet connection. NUMERODISP="$(wc -l $FILE1 | awk "{print $1}")" #this command counts number of devices (IP"s) in the file as it is a .csv file, it only counts number of lines. for i in `seq 2 $NUMERODISP`; do IP="$(awk -vnum="$i" "NR == num { print $NF }" dispositivoss.csv)" echo "$IP" #this takes the IP from last column from .csv file done 

telnet을 통해 $ IP에 저장된 IP에 연결되도록 for 루프를 완료해야합니다. “show version”출력을 저장합니다.

나는 이것을 시도했습니다 :

for i in `seq 2 $NUMERODISP`; do IP="$(awk -vnum="$i" "NR == num { print $NF }" dispositivoss.csv)" send "telnet $IP\r" expect "Username:" send "$Username\r" expect "Password: " send "$Password\r" expect "*>" send "show version\r" log_file -noappend SN_$IP.dat; expect -ex "--More--" {send -- " "; exp_continue} expect "*>" log_file; done 

그러나 작동하지 않았습니다.

이것이 bash를 사용할 수없고 예상 할 수없는 이유입니까?

그것이 이유 인 경우 .. $ IP 및 $ NUMDISP를 변수로 다른 expect 스크립트에 어떻게 보낼 수 있습니까? (this 이것이 다른 질문과 “다르다고 생각하는 이유입니다.”

댓글

  • 여러 Telnet 공동의 중복 가능성 Expect while 루프의 nnection
  • @thrig OP는 분명히 ' ' sa ' 방금이 질문을했기 때문에 속이는 것입니다.
  • 두 질문을 모두 작성했는데 다른 질문과 약간 다른 것 같습니다.
  • stackoverflow.com/questions/36284861/ …
  • 답변

    #!/bin/bash #!/usr/bin/expect -f 

    음 … 아니요.

    기본적으로 두 가지 모두 스크립트를 읽고 모든 줄에 대해 “올바른 일을”하는 프로그램. 인터프리터 간의 스크립트 실행 동기화 사이의 문제를 제외하고는 두 언어 모두에서 유효한 명령이 될 수있는 줄이있는 순간 이것이 불가능하다는 것을 쉽게 알 수 있습니다.

    다음과 같은 것을 고려하십시오. 귀하의 예입니다.

    set Username "user" 

    실제로 쉘과 expect 스크립트 모두에서 유효합니다. 셸에서 위치 매개 변수 $1$2Username

    입니다. expect에서는 다른 것을 할당합니다. 어떤 작업을해야합니까?

    expect 스크립트를 다른 파일로 분할하고 쉘 스크립트에서 호출하거나 Expect가 자체적으로 루프 및 IO를 수행 할 수있는 TCL에서 실행된다는 사실을 사용하십시오.


    이 경우에는 두 번째 코드 블록의 셸 루프에 포함 된 예상 스 니펫 만 있습니다.

    그러므로 셸 스크립트를 만드세요.

    #!/bin/bash for i in `seq 2 $NUMERODISP`; do IP="$(...)" expect -f somename.expect $IP done 

    및 쉘 스크립트에서 호출 할 예상 스크립트 :

    #!/usr/bin/expect -f set IP [lindex $argv 0]; spawn telnet $IP expect "Username:" send "$Username\r" ... 

    댓글

    • @cesar, 쉘 스크립트 안에 expect 스크립트를 넣는 방법이 있지만 항상 인용과 변수에 골칫거리가 있습니다. 이것이 가장 깔끔한 방법입니다.

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다