expect 的和bash共用以及autoexpect简单介绍

这里为大家简单介绍一下expect的使用,之前在网上搜索expect的相关资料,意外地发现了autoexpect这个东东,相信会超出你的期望,至少对我是这样。

春节放假的时候,被要求修改部门所有主机的密码,我们大概有100多台主机,如果一台台上去改,实在是太累也没有任何成就感,因此想到用expect来解决问题:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/expect   --
set timeout -1

if { [llength $argv] < 3} {
   puts "usage: $argv0 ip oldpasswd newpasswd"
   exit 1
}

spawn /usr/local/bin/ssh [lindex $argv 0] -p36000 -lroot

expect "assword: "
send "[lindex $argv 1]/r"
expect "#"
send "passwd/r"
expect "New password:"
send "[lindex $argv 2]/r"
expect "Re-enter new password:"
send "[lindex $argv 2]/r"
expect "#" {send "exit/r"}
expect eof
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

简单解释一下:expect是基于TCL脚本的一种脚本语言,可以使需要人工交互的一些工作自动化。expect中最重要的几个关键字就是spawn, expect, send, lindex 。

spawn 用于生成一个子进程运行命令
expect 用于期待一个字符串的出现
send 就是模拟人工输入一个字符串
lindex 可以在数组中选择某个元素

上面的脚本基本上就是创建一个ssh进程,尝试登录到指定IP,当ssh提示输入密码时,把oldpasswd发送过去,然后期待提示符"#"的出现,以此类推就可以完成所有工作。
把上面脚本保存到chg_pwd.exp,然后加上可执行权限,就可以用./chg_pwd.exp 172.16.24.57 old new修改密码了,然后写个shell脚本就可以批量修改密码了,如:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/bin/bash

filename=$1
while read internalip
do
   ./chg_pwd.exp $internalip $2 $3
done < $filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

一种语言再简单,也需要学习。然而autoexpect甚至可以自动生成expect脚本。

运行autoexpect -p就进入autoexpect创建的shell中,然后输入的命令交互都被记录下来,最后输入exit退出,expect脚本被保存在script.exp中。
下面的例子演示了通过ssh登录到一台主机然后退出。

rong@dev:~$ autoexpect -p ssh 172.16.24.57 -lroot -p36000
autoexpect started, file is script.exp
root's password:
Last login: Thu Feb 24 2005 20:00:32 +0800
Linux 2.4.20.
You have mail.
root@platform57:~# exit
logout
autoexpect done, file is script.exp
rong@dev:~$

只要再次执行 ./script.exp,就可以重复刚才运行的命令。

效果就象先录音然后回放一样。

 

下面是有关使用expect的几个实例地址

 

http://fanqiang.chinaunix.net/a4/b8/20010912/1000001278.html

 

http://blog.chinaunix.net/u2/82938/showart_1829277.html

 

http://linux.sheup.com/linux/linux5439.htm

 

http://hi.baidu.com/face2u/blog/item/2dd08613ec2274d8f7039e2e.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值