Linux expect使用摘要
阿新 • • 發佈:2019-01-23
expect互動,包括三個檔案:bash.sh、expect.exp、ip.list(預設在同一個目錄下)
執行有兩種方式,1.sh bash.sh
根據ip.list表來執行;2.expect.exp x.x.x.x
單個ip執行
後面發現在expect指令碼中,“#”要出現在命令最開始的地方才是註釋,否則會報錯。
bash程式碼:
#!/bin/bash for ip in `awk '{print $1}' ip.list` ## 從ip.list檔案中獲取需要處理的ip do ## echo -e "\033[47;30m start get_NicSpeed of $ip \033[0m" expect -f expect.exp $ip > $ip.result ## 將ip作為引數傳遞給expect指令碼執行,並將結果寫入生成$ip.result檔案 ## cat $ip.result |grep --color Speed ## 讀出檔案內容,並過濾。 done
expect程式碼:
#!/usr/bin/expect -f # 取傳入的第一個引數賦值 set ipaddress [lindex $argv 0] # 變數賦值 set password ******** # 設定超時時間3s,預設10s set timeout 3 # “spawn” 關鍵字發起一個程序,“exp_continue” 繼續執行下面匹配 spawn ssh $ipaddress expect { "yes/no" {send "yes\r";exp_continue} "*assword:" {send "$password\n"} } ## 下面是執行語句,仍然需要使用 “expect” 關鍵字進行匹配,配合 “send” 關鍵字,傳送命令。 for {set i 0} {$i < 8 } {incr i} { ## 迴圈 expect "]#" {send "ethtool eth$i|grep Speed\r"} set j [expr $i+1] ##expect中的加法 ## 加法 expect "~#" {send "/usr/local/bin/ethtool eth$j|grep Speed\r"} } # 退出方式之一 expect { "~#" {send "exit\r";exp_continue} "]#" {send "exit\r"} }
ip列表檔案:
10.10.10.1
10.10.10.2
...
其他:
$argc:統計位置引數數量
timeout -1:永不超時退出
interact:互動後不退出遠端終端
puts:列印字串,類似於echo