昨天才看了expect资料,下午工作不忙写了个脚本改密码的,代替passwd交互。
- #!/usr/bin/expect --
- set timeout 30
- set name [lindex $argv 0]
- set pw [lindex $argv 1]
- log_user 0
- spawn passwd $name
- for {set i 1} {$i < 3} {incr i} {
- expect "*password:" {send "$pw\r"}
- }
- expect "*successfully"
- send_user "Password updated successfully\n"
- expect eof
[解析]
很简单的程序,首先把第一个参数赋值给变量name作为用户名,把第二个参数赋值给pw作为密码。然后关闭标准输出,就是类似shell的 "> /dev/null",然后spawn开启子进程运行passwd程序,因为会重复输入2次密码,所以这里我们用到了TCL语法的for循环,执行2次密码输入。最后匹配到successfully字样的就输出修改成功,然后退出脚本。
- #!/usr/bin/expect --
- set timeout 30
- set name [lindex $argv 0]
- set pw [lindex $argv 1]
- log_user 0
- spawn passwd $name
- expect {
- "password" {send "$pw\r";exp_continue}
- "su" {puts "Password updated successfully"}
- }
- expect eof
[解析]
这个脚本更简单利用了"exp_continue",匹配到password字样的就发送密码然后再返回到花括号开始重新执行,到了第3次匹配不到password字样了,匹配了su ,然后输出到屏幕。
阅读(4183) | 评论(1) | 转发(1) |