expect自動互動指令碼執行失敗問題分析

2021-10-01 03:35:07 字數 958 閱讀 5342

前言:

寫了乙個自動互動指令碼中用到了expect自動互動工具。目的是自動登陸到伺服器,並執行預先寫好的shell指令碼。

**如下:

#!/usr/bin/expect

settimeout -1

set script "/weblogic/sj/viewusage.sh"

set host 100.12.128.1

set username weblogic

set password [

exec

dc -e 42270635435205155082p ]

spawn ssh

$username@

$host

expect

"*assword:"

}expect

"]*"

send "$script\r"

expect

"]*"

send "exit\r"

send "\r"

問題描述:

執行後偶爾會出現指令碼script未成功執行的情況。

問題原因:

指令碼結尾處未加expect eof

問題分析:expect 的核心功能,對於設定好的特定匹配形式,以相匹配的動作以應對。每乙個expect後所跟的字串(或者正規表示式)就是指令碼所等待的匹配模式,每乙個send 所做的工作就是對於各種的模式串,實施相應的動作。

解決方法:

結束expect要加上expect eof

最後是等待標示子程序已結束的標示符eof,然後退出。(注:這個等待eof必須要有,如果沒有eof,很可能在子程序沒有結束前就退出,造成問題。)

expect 自動互動指令碼

命令列引數 ar 引數陣列,使用 lindex ar n 獲取,ar 0為指令碼名字 argc,引數個數 set username lindex ar 1 獲取第1個引數 set passwd lindex ar 2 獲取第2個引數 set timeout 30 設定超時 spawn是expect內...

使用expect實現自動互動,自動登入指令碼

使用expect實現自動互動,自動登入指令碼 指令碼 如下 usr bin expect set timeout 30 spawn ssh l username 192.168.1.1 expect password send ispass r interact 1.usr bin expect 這...

自動互動式指令碼 expect簡介

我們經常會遇到一些需要與伺服器程式打交道的場景,比如,從登陸某個伺服器,然後進行某項工作。這很平常,但是如果把這個工作自動化進行,你就需要乙個程式能自動做你要告訴機器的事情,這樣,我們的expect就能大顯身手了。首先,expect是乙個簡單的工具語言,如要工作就是進行自動化的人機互動。它的作者對e...