expect實現自動互動。如,scp,ssh,ftp、root等需要輸入密碼的互動需求;
例如ssh命令遠端登入其他主機,會要求輸入密碼
(ps:有時候有的機器登入也不需要密碼)
#!/bin/sh
echo "start"
expect -c "
expect "hello"
send "world\n"
expect eof
"echo "end"
send "world\n"-------------->此處使用\n 或者 \r都是可以的。
命令含義
spawn
呼叫要執行的命令
expect
等待命令提示資訊的出現(捕捉使用者提示資訊)
send
傳送需要互動的資訊來替代手工輸入
set設定變數的值
interact
執行完成後保持互動狀態,把控制權交給控制台,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。
expect eof
與spawn對應,表示捕捉終端輸出資訊終止
說明:1)interact 和expect eof 二者寫乙個就行,二者區別參考本文。
2)寫與不寫interact 或expect eof 的區別:
3)spawn 後面對應的是命令
4)expect 「password」 ------------------>注意字串要加引號,引號中是包含的字串就行,不用寫全;
5)send "mima\r" ------------------->傳送的字串要加引號,並且一定要加 \r ,表示回車,否則一直在等待send的內容。
6)等待時間設定
#!/usr/bin/expect ----------->第一行告訴作業系統指令碼裡的**使用那乙個shell來執行
set timeout -1 ----------->設定expect永不超時
set timeout 10 ------------>設定expect10s超時,如果超過10s,沒有expect內容出現,則會退出
expect 預設的時間是10s, 這個地方可以根據需求更改。
命令:which expect
如果裝了,會顯示expect 的目錄
沒有裝的話,看第二步。
系統為rhel/centos:
sudo yum install expect
系統為debian/ubuntu:
sudo apt-get install expect
裝好目錄在/usr/bin/expect
#!/usr/bin/expect
set timeout 30
spawn ssh [email protected]
expect "password:"
send "pass\r"
expect eof
單獨使用expect 第一行寫的是 #!/usr/bin/expect
expect "password:" -------->判斷上次輸出結果裡是否包含「password:」的字串,如果有則立即返回,否則就等待一段時間後返回,這裡等待時長就是前面設定的30秒
Mac利用expect編寫自動執行指令碼
在公司中登入docker機需要手動輸入密碼非常麻煩,因此可以用expect編寫指令碼利用指令碼自動登入。1 安裝brew 若已安裝可省略 brew 是 mac 下的乙個包管理工具,類似於 centos 下的 yum,可以很方便地進行安裝 解除安裝 更新各種軟體包 ruby e curl fssl 2...
expect指令碼解釋
使用expect實現自動登入的指令碼,網上有很多,可是都沒有乙個明白的說明,初學者一般都是照抄 收藏。可是為什麼要這麼寫卻不知其然。本文用乙個最短的例子說明指令碼的原理。指令碼 如下 usr bin expect set timeout 30 spawn ssh l username 192.168...
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內...