在指令碼中寫入與系統互動時可能出現的詢問語句,然後將要回答的答案也寫入指令碼中,實現自問自答,從而實現指令碼的人機互動。
expect 是自動應答命令用於互動式命令的自動執行
spawn 是 expect 中的監控程式,其執行後會監控命令提出的互動問題
send傳送問題答案給互動命令
"\r"表示回車
exp_continue 標示當問題不存在時繼續回答下面的問題
expect eof 標示問題回答完畢退出 expect 環境
interact標示問題回答完畢留在互動介面
set name [ lindex $ar** n ]定義變數
第一步:安裝該軟體
yum install -y expect.x86_64
檢視這個軟體的編譯器:
編寫指令碼登入:
#!/usr/bin/expect
set ip 192.168
.13.134
//定義登入的主機ip
set pass westos /
/定義登入密碼
spawn ssh root@
$ip /
/開啟乙個程式,遠端登入$ip
expect
//exp_continue是因為有時候我們第二遍登入的時候沒有這個詢問是否的語句的時候,就要執行continue
"password:"
}interact /
/進入互動介面
expect{}語句:
需求1:a遠端登入到server1並執行一些命令,然後自動退出。
指令碼:
#!/usr/bin/expect
set ip 192.168
.13.134
set pass westos
spawn ssh root@
$ipexpect
"password:"
}#interact //關閉互動式介面,因為這次是在指令碼裡面輸入要執行的**
expect
//最後退出登入
}expect eof /
/關閉expect
執行結果:其實是將命令在本機命令列自動輸入,然後自己回答。一下整個過程全是自動:
[root@server1 shells]
# expect -f expect1.sh
spawn ssh root@
192.168
.13.134
root@
192.168
.13.134's password:
last login: wed nov 1113:
16:052020 from 192.168
.13.129
mount:
/dev/sr0 is write-protected, mounting read-only
mount:
/dev/sr0 is already mounted or /var/www/html/rhel7.5 busy
/dev/sr0 is already mounted on /var/www/html/rhel7.5
[root@server2 ~
]# touch /mnt/666
[root@server2 ~
]# ll -d /mnt/ > /mnt/666
[root@server2 ~
]# exit
logout
connection to 192.168
.13.134 closed.
我們去登入的目標主機下看看命令是否執行成功:
[root@server2 mnt]
# ls |grep 666
666[root@server2 mnt]
# cat 666
drwxr-xr-x. 10 root root 4096
11月 1113:
18/mnt/
shell指令碼之expect語句
在編寫shell指令碼時,我們可能會遇到一些互動式的情況,如passwd ssh等等指令碼時,常常需要手動進行互動。這樣,原本為了實現自動部署的指令碼顯得有些不大方便,這時你就會用上expect命令了。expect命令可以幫你把互動式命令變成非互動式。expect 有期待 期望的中文意思。正如它的中...
shell自動互動之expect指令碼 轉
linux expect詳解 ssh自動登入 shell指令碼實現ssh自動登入遠端伺服器示例 usr bin expect spawn ssh root 192.168.22.194 expect password send 123 r expect interact expect是乙個用來處理互...
shell指令碼巢狀執行expect命令
1.expect命令說明 為避免反覆呼叫,可以巢狀執行 相關命令 spawn 啟動乙個程式或程序 send 給程序或程式返回結果 expect 接受程式或程序輸出 interact 使使用者處於程序或程式的互動狀態,ssh登入後不自動登出 2.shell中巢狀expect命令 bin bash sq...