代码改变世界

expect实现交互式脚本

2013-08-23 13:54  cmsd  阅读(293)  评论(0编辑  收藏  举报

 

#!/usr/bin/expect -f  ##告诉解释器用expect来解释

set timeout 6     ##设置超时时间

set user [lindex $argv 0 ]  ## 这个是传递给脚本的第一个参数,并把参数赋值给user
set ip [lindex $argv 1]     ## 这个是传递给脚本的第二个参数,依次类推
set passwd [lindex $argv 2]

spawn ssh $user@$ip         ##spawn的意思是执行这个命令
expect {                    ##expect是指期待获得什么值,如果多行,请用'{'
   "yes" {
           send "yes\r"     ##如果是得到的字符串中有yes的话,就send也就是传入个'yes\r'
           expect "assword" ##同理如果包含 'assword’
           send "$passwd\r" ##就发送变量passwd的内容并换行
         }
   "assword" {send "$passwd\r"} ##这个好理解了吧
}

expect "]"                  ##单行的写法就很简单了

send "ls /home\r"             
send "exit"

interact                    ##interact是指停留在交互的界面,如果没有它,执行完命令会回到原来的shell中