简单学习使用 expect

版权声明:本文为博主原创文章,未经博主允许不得转载。 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:

猜你喜欢

转载自blog.csdn.net/qq_36748278/article/details/84399416