expect编程

来源:互联网 发布:岳不群 知乎 编辑:程序博客网 时间:2024/05/23 14:26

Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。
用Expect语言主要是为了对集群进行管理,包括自动重启,删除,建立文件夹等。
首先进行安装expect工具

sudo apt-get install tcl tk expect

脚本以.exp结尾,用expect *.exp命令来执行

expect *.exp

下面是几个例子:
scp脚本:

#!/usr/bin/expect -f#设置变量password为hadoopset password hadoop#编写for循环i从1到9       for{set i 1} {$i <=19}  {incr i} {#将/home/hadoop/文件夹下的test文件发送到hadoop@192.168.3.$i:/home/hadoop文件夹下  spawn scp /home/hadoop/text hadoop@192.168.3.$i:/home/hadoop#设置命令执行时间为300msset timeout 3000#第一次执行会询问密钥expect "Are you sure you want to continue connecting (yes/no)? "#发送“yes”            send  "yes\r"set timeout 300#检测控制台是否输出"password: "                  expect "password:"#将"$password\r"即hadoop发送到控制台           send  "$password\r"#执行完毕退出         expect eof}

rm脚本

#!/usr/bin/expect -fset password hadoopfor {set i 1} {$i <=19}  {incr i} {#通过ssh登陆节点spawn ssh slave$i#检测输出“$”expect "$"#执行删除命令send "rm -r /home/augustus/hadoop.tar.gz\r"set timeout 100#执行退出命令                     send "exit\r"puts $iexpect eof      }

sudo脚本

#!/usr/bin/expect -fset password hadoopfor {set i 1} {$i <=19}  {incr i} {spawn ssh slave$iexpect "$"send "sudo tar -zxf /home/augustus/hadoop.tar.gz -C /usr/local/augustus/\r"set timeout 100expect "password for augustus:"send  "$password\r"set timeout 200send "exit\r"expect eof      }
需要转义的字符\ 需转义为 \\\} 需转义为 \}[ 需转义为 \[$ 需转义为 \\\$` 需转义为 \`" 需转义为 \\\"
原创粉丝点击