expect命令


交互式轉化批處理工具expect:

基於Tcl語言開發,默認是交互式,但可以免去交互式
借助expect處理交互的命令,可以將交互過程如:ssh登錄,ftp登錄等寫在一個腳本上,使之自動化完成。尤其適用於需要對多台服務器執行相同操作的環境中,可以大大提高系統管理人員的工作效率

注意:
  • 在文件中執行時,就必須使用expect自身的程序來運行命令
  • 自身的程序是: /bin/expect,可以把expect當成一種語言

命令格式:

expect [選項] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
選項:
	-c:從命令行執行expect腳本,默認expect是交互地執行的
	-d:可以輸出輸出調試信息
例:
expect "hj" {send "echo hj"}	#有hj字符,就打印echo hj

expect "qq" {send "echo qqq"} "ww" {send "echo ww"}	  #可監聽多個關鍵字
expect {
"qq" {send "echo hj\n"}
"hi" {send "echo hi\n"}
}

expect eof

相關命令:

命令 作用
spawn 啟動新的進程(運行命令)
expect 從進程接收字符串(監聽從程序輸出的關鍵字)
send 用於向進程發送字符串
interact 允許用戶交互
exp_continue 繼續,匹配多個字符串在執行動作后加此命令
例: 自動登錄ssh腳本
vim exssh
#!/bin/expect

spawn ssh root@2.2.2.25
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "123456\n"}
}
expect eof		#退出expect程序

chmod +x exssh
./exssh
例2: 設置expect的變量,ssh免交互登錄
vim exssh
#!/bin/expect

set ip 2.2.2.25
set pw 123456
set user root
set timeout 10
spawn ssh $user@$ip
expect {
	"yes/no" {send "yes\n";exp_continue}
	"password" {send "$pw\n"}
}
例3: 使用位置參數,ssh免交互登陸
vim exssh
#!/bin/expect

set ip [lindex $argv 0]		#等於$1
set user [lindex $argv 1]	#等於$2
set pd 123456
spawn ssh $user@$ip
expect {
	"yes/no" {send "yes\n";exp_continue}
	"password" {send "$pw\n"}
}
expect "#" {send "useradd user1\n"}
expect "#" {send "echo 123456|passwd --stdin user1"}
send "exit\n"
expect eof
例4: shell腳本中使用expect腳本
vim ts.sh
#!/bin/bash

IP=1.1.1.25
US=root

expect <<-EOF
set timeout 20
spawn ssh $US@$IP
expect {
"yes/no" {send "yes\n";exp_continue}
"password" {send "$pw\n"}
}
expect "#" {send "touch file111\n"}
send "exit\n"
expect eof
EOF


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM