乱读天书, 不求甚解
周祎骏的个人云笔记
Toggle navigation
乱读天书, 不求甚解
主页
Linux:系统配置
Linux:用户管理
Linux:优化排错
Linux:进程调度
Linux:文件系统
Linux:网络
Linux:系统服务
Linux:安全
Linux:内核
容器:Docker
容器:containerd
容器编排:Kubernetes
IAC:Terraform
大数据:Hadoop
大数据:Zookeeper
大数据:Hbase
消息队列:rsyslog
消息队列:kafka
数据库:MySQL
数据库:MongoDB
搜索引擎:Elasticsearch
时序数据库:OpenTSDB
网站服务:Nginx
编程:Bash
编程:Perl
编程:Python
编程:C
编程:JAVA
编程:Rust
版本控制:gitlab
知识管理:docusaurus
常用小工具
关于我
标签
perl 3.06 自动化交互
2016-05-28 03:05:45
63
0
0
admin
>有时候我们要写些自动交互的脚本,linux 上有expect,perl 也有对应的模块(Expect.pm),而且可以很灵活的使用 文档:http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod ```perl [leo@localhost perl]$ cat expect.pl #!/usr/bin/perl use warnings; use strict; use Data::Dumper; use Expect; my $user = "root"; print "passwd:"; `stty -echo`; #用这种方式可以让命令行输入不回显 chomp(my $pw = <STDIN>); `stty echo`; #关掉不回显的功能 print "\n"; sub report_timeout{ print "TIME OUT!!!!!!!!!!\n"; } my $session = Expect -> spawn("ssh $user\@localhost"); #跑这个命令 $session->log_file("./log","w"); # 相当于 > ./log #$session->log_file("./log"); # 相当于 >> ./log $session->expect(5, #5秒timeout [ timeout => \&report_timeout ], #timeout 后触发report_timeout 子方法 [ qr/YES\/NO/i, #当显示yes/no 的时候触发后面的子方法 sub{ my $self = shift; $self -> send("yes\n"); exp_continue; #继续这次expect } ], [ qr/password/, sub{ my $self = shift; $self -> send("$pw\n"); #exp_continue; #如果不注释掉就会继续本次expect,由于没有后续配置,会一直干等,最后会timeout } ], ); $session->send("hostname\n") if ( $session->expect(3,'#'));#看到井号(登录成功) 就打hostname 命令 $session->send("exit\n") if ( $session->expect(3,'#')); $session->soft_close(); # 正常退出 #$session->hard_close(); # 这是立即结束 ```
上一篇:
perl 3.05 连数据库的方式(mysql)
下一篇:
perl 3.07 处理CSV 格式文件
文档导航