版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36748278/article/details/84399416
基本语法:
send
:接收一个字符串参数,将参数发送到进程
expect
:和send相反,根据进程输出的反馈,再发送(send)对应的交互命令
spawn
:启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互
interact
:允许用户交互。退出自动化,进入人工交互。
编写一个简单的expect例子:
[danni@vm-xxx-18 expect5.45.3]$cat Demo1.sh
#!/usr/local/bin/expect
# send:向进程发送字符串
# expect:从进程接收字符串
send "1:开启,2:关闭\n"
expect {
"1"
{
send "哈哈开启了\n"
exp_continue
}
"2"
{
send "呦呦关闭了\n"
exp_continue
}
"quit"
{
exit
}
}
执行结果:
[danni@vm-xxx-18 expect5.45.3]$ expect Demo1.sh
1:开启,2:关闭
1
哈哈开启了
2
呦呦关闭了
1
哈哈开启了
2
呦呦关闭了
1
哈哈开启了
1
哈哈开启了
quit
[danni@vm-xxx-18 expect5.45.3]$
传入参数的示例
$argc
:表示参数个数,参数值存放在$argv
中,比如取第一个参数就是[lindex $argv 0]
[danni@vm-xxx-18 expect5.45.3]$ cat Demo2.sh
#!/usr/local/bin/expect
if {$argc < 3} {
puts "Usage:cmd <host> <username> <password>"
exit 1
}
# 通过set设置变量
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
# 通过spawn开启一个新的进程,接下来的expect和send都是针对于新的进程
spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
执行结果:
[danni@vm-xxx-18 expect5.45.3]$ expect Demo2.sh 192.168.3.236 danni danni
spawn ssh [email protected]
[email protected]'s password: