예상 출력에서 ​​단어를 확인하고 텍스트 파일에 추가하세요.

예상 출력에서 ​​단어를 확인하고 텍스트 파일에 추가하세요.

나는 이 코드를 가지고 있습니다 :

#!/opt/tools/unsupported/expect-5.39/bin/expect

set timeout 10
match_max 256
log_file report.txt

expect_after eof {exit 0}
spawn ssh -l user ip

expect "(yes/no)?" { send "yes\r" }
expect "password:" { send "password\r" }

expect "~]#" { send "date\r" }

set timeout 600

expect "~]#" { send "scp user@ip:/sometlink/AMM.tar.gz /somelink/\r" }

expect "Password:" { send "password\r" }
sleep 5

set timeout 3600

expect "~]#" { send "swadm install import AMM\r" }
sleep 5

expect "~]#" { send "swadm install apply AMM\r" }

expect "~]#" { send "swadm install show AMM\r"}

expect -re "(.*)\r\nproduct-state=(.*)"

foreach line [split $expect_out(1,string) \n] {
        if {[string match *Applied* $line]} {
            send_log "Product install of AMM ----------------------------- Passed"
                    }
    else {
           send_log "Product install of AMM ----------------------------- Failed"
            }
}


expect "~]#" { send "date\r" }
expect "~]#" { send "exit\r" }

swadm install show AMM의 출력을 확인해야 합니다.

product-id=AMM
product-name=Application Manager
product-version=1.0.0
product-state=Applied
product-description=
NCL-list=AMMLV010

"app"이라는 단어가 발견되면 성공적인 설치를 나타내는 테스트 파일에 추가되고, 발견되지 않으면 설치 실패를 나타냅니다. 하지만 다른 부분에서는 오류가 발생합니다.

invalid command name "else"
     while executing
"else {
           send_log "Product install of AMM -----------------------------     Failed"

("foreach" body line 6)
invoked from within
"foreach line [split $expect_out(1,string) \n] {
    if {[string match *Applied* $line]} {
            send_log "Product install of AMM-----..."

답변1

나는 이렇게 할 것이다:

expect "~]#" { send "swadm install show AMM\r"}
expect "~]#" {
    if {[string match {*product-state=Applied*} $expect_out(buffer)]} {
        do-thing-1
    } else {
        do-thing-2
    }
}

"show" 명령 후에는 다음 프롬프트가 나올 때까지 기다리세요. 그런 다음 예상되는 모든 것이 포함되고 expect_out(buffer)전체 버퍼 텍스트에 대해 문자열 일치(또는 원하는 경우 정규식 일치)를 사용할 수 있습니다. 행별로 나눌 필요는 없습니다.

답변2

문제를 이해합니다! } else { 사이에 새 줄이 없어야 합니다.

관련 정보