linux-expect命令詳解
2023年04月16日 10:38:57 jacky0922 閱讀數 11406
expect (主頁 是用於提供自動互動的工具。比如你要用ssh或者 telnet登入伺服器的時候,命令列下提示需要輸入使用者和密碼等。如果叫你用shell指令碼寫自動登入指令碼的話是不是有點困難呢? 你會說在shell中執行ssh命令的話,他會一直停在那裡等你密碼啊,這個要手工來做才行吧?
expect就是為處理這類情況而設計的工具,簡單來說它可以控制、處理輸入,輸出流,然後提供自動填寫資料等需要使用者互動式輸入的資料的地方實現自動化處理。expect就是為了處理「自動互動」的工具。
expect 支援自定義的指令碼,所以你通過編寫自定義指令碼就可以實現你想要的自動填寫資料功能了
expect & tcl
expect採用的是一種叫做tcl (tool command language )的指令碼語言,所以你至少要學習一下tcl它的語法。
tcl資料
tcl**
tcl/tk 8.5 manual: &
tcl tutorial: tutorial/tcltutorial.html
tcl syntax help:
learning tcl:
上面幾個**都屬於tclers wiki 下面的分支來的。
tcl書籍
還有一本書《practical programming in tcl and tk》
expect 命令
要使用expect,你還要熟練 掌握expect中定義的命令
如 expect , spawn,send ,wait等等。
expect手冊 ? manpage of expect
還有乙個** 也是expect命令介紹
expect中最關鍵的四個命令是send,expect,spawn,interact。
send:用於向程序傳送字串
expect:從程序接收字串
spawn:啟動新的程序
interact:允許使用者互動
send命令
send命令接收乙個字串引數,並將該引數傳送到程序。
expect1.1> send "hello world\n"
hello world
expect命令
(1)基礎知識
expect命令和send命令正好相反,expect通常是用來等待乙個程序的反饋。expect可以接收乙個字串引數,也可以接收正規表示式引數。和上文的send命令結合,現在我們可以看乙個最簡單的互動式的例子:
expect "hi\n"
send "hello there!\n"
這兩行**的意思是:從標準輸入中等到hi和換行鍵後,向標準輸出輸出hello there。
tips: $expect_out(buffer)儲存了所有對expect的輸入,<$expect_out(0,string)>儲存了匹配到expect引數的輸入。
比如如下程式:
expect "hi\n"
send "you typed <$expect_out(buffer)>"
send "but i only expected <$expect_out(0,string)>"
當在標準輸入中輸入
test
hi是,執行結果如下
you typed: test
hii only expect: hi
(2)模式-動作
expect最常用的語法是來自tcl語言的模式-動作。這種語法極其靈活,下面我們就各種語法分別說明。
單一分支模式語法:
expect "hi"
匹配到hi後,會輸出"you said hi"
多分支模式語法:
expect "hi" \
"hello" \
"bye"
匹配到hi,hello,bye任意乙個字串時,執行相應的輸出。等同於如下寫法:
expect
"hello"
"bye"
}spawn命令
上文的所有demo都是和標準輸入輸出進行互動,但是我們跟希望他可以和某乙個程序進行互動。spawm命令就是用來啟動新的程序的。spawn後的send和expect命令都是和spawn開啟的程序進行互動的。結合上文的send和expect命令我們可以看一下更複雜的程式段了。
spawn ftp ftp.test.com
expect "name"
send "user\r"
expect "password:"
send "123456\r"
linux expect詳解 ssh自動登入
shell指令碼實現ssh自動登入遠端伺服器示例 usr bin expect spawn ssh root 192.168.22.194expect password send 123 r expect interact expect是乙個用來處理互動的命令。借助expect,我們可以將互動過程寫...
linux expect詳解 ssh自動登入
shell指令碼實現ssh自動登入遠端伺服器示例 usr bin expect spawn ssh root 192.168.22.194 expect password send 123 r expect interact expect是乙個用來處理互動的命令。借助expect,我們可以將互動過程...
linux expect詳解 ssh自動登入
shell指令碼實現ssh自動登入遠端伺服器示例 usr bin expect spawn ssh root 192.168.22.194expect password send 123 r expect interact expect是乙個用來處理互動的命令。借助expect,我們可以將互動過程寫...