Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2992975
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-08-01 16:24:07

    昨天才看了expect资料,下午工作不忙写了个脚本改密码的,代替passwd交互。
  1. #!/usr/bin/expect --

  2. set timeout 30
  3. set name [lindex $argv 0]
  4. set pw [lindex $argv 1]
  5. log_user 0
  6. spawn passwd $name
  7. for {set i 1} {$i < 3} {incr i} {
  8.     expect "*password:" {send "$pw\r"}
  9. }
  10. expect "*successfully"
  11.     send_user "Password updated successfully\n"
  12. expect eof

[解析]

  很简单的程序,首先把第一个参数赋值给变量name作为用户名,把第二个参数赋值给pw作为密码。然后关闭标准输出,就是类似shell的 "> /dev/null",然后spawn开启子进程运行passwd程序,因为会重复输入2次密码,所以这里我们用到了TCL语法的for循环,执行2次密码输入。最后匹配到successfully字样的就输出修改成功,然后退出脚本。

 

 

  1. #!/usr/bin/expect --

  2. set timeout 30
  3. set name [lindex $argv 0]
  4. set pw [lindex $argv 1]
  5. log_user 0
  6. spawn passwd $name
  7. expect {
  8.     "password" {send "$pw\r";exp_continue}
  9.     "su" {puts "Password updated successfully"}
  10. }
  11. expect eof

[解析]

  这个脚本更简单利用了"exp_continue",匹配到password字样的就发送密码然后再返回到花括号开始重新执行,到了第3次匹配不到password字样了,匹配了su ,然后输出到屏幕。

阅读(4149) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

horizonhyg2011-08-02 10:44:16

最近用scp拷贝文件用到了expect,比较好使,但是不太明白,你多写点吧,我学学