0
我已經編寫了一個期望腳本,通過ssh登錄到遠程計算機並執行命令以獲取系統信息詳細信息。我可以登錄到遠程機器並運行命令並獲取輸出。我在解析輸出時遇到了一些麻煩。我收到一些不需要的文本,並將其作爲輸出的一部分執行,我需要您的幫助來消除這些文本,並獲取相關文本作爲輸出。無法正確解析預期腳本中的命令輸出
的期望腳本下面貼
#!/usr/bin/expect
set timeout 10
log_user 0
set promptEn "(>|#|%|\\$)"
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set query [lindex $argv 3]
if {[llength $argv] == 0} {
send_user "Usage: scriptname Ip-address Username password query\n"
exit 1
}
spawn ssh -q -o StrictHostKeyChecking=no "$user\@$ip"
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure "; exit 1 }
"*assword"
}
send "$password\r"
expect {
timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1}
#-re "$promptEn"
-re $promptEn
}
send_user "\nPassword is correct\n"
#command to be executed
send "sudo dmidecode -t system |grep -w \"$query:\"\r"
expect {
timeout2 { send_user "\nFailed to get password prompt on remote machine \n"; exit 1 }
eof { send_user "\nSSH failure "; exit 1 }
"*assword"
}
send "$password\r"
expect {
timeout
{
send_user "\n Command Failed \n"; exit 1
}
-re "$promptEn"
}
expect -re "$query:"
puts "$expect_out(buffer)"
send "exit\r"
我運行的命令行參數的腳本如下
預計sshtest.exp 192.168.4.42 testaccount密碼@ 123廠商
和我得到解析的輸出爲
Password is correct
sudo dmidecode -t system |grep -w "Manufacturer:"
Manufacturer: LENOVO
[email protected]:~#
我只想要l但只有一行製造商:LENOVO作爲輸出,但不是其他文本。
我可以調用腳本如下
expect sshtest.exp 192.168.4.42 testaccount [email protected] Manufacturer|tail -2 |head -1
讓行,但我不想這樣做,因爲這樣我會錯過了錯誤信息,如果系統不能連接。