[d]perl读文件问题?

jtyun 2012-09-08 10:29:22
请大家帮我看看这个问题
文件内容是ip地址用户名用户密码,每行文件中间用一个空格
192.168.1.2 root #@……1234as
192.168.1.3 oracle oracle
...............
那么perl怎么循环读这个文件,而且每次一行一行的读,读一行之后,把ip地址用户名密码分别赋给数组呢?


--------------------------
Double行动:
原帖分数:40
...全文
186 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jtyun 2012-09-12
  • 打赏
  • 举报
回复
use strict;
use Net::Telnet;

my $cmdstr = $ARGV[0];

sub remoteExec {
my ($hostname) = $_[0];
my ($username) = $_[1];
my ($password) = $_[2];
my ($cmd) = $_[3];
my (@output);
my ($t);


$t = new Net::Telnet (Timeout => 30, Prompt => '/[\$%#>]/');
$t -> max_buffer_length("10485760");
$t -> input_log("logfile");
$t -> open ($hostname) || warn "Failed to connect to $hostname.";
$t -> login ($username, $password) || warn "Failed to login in to $hostname.";
@output = $t -> cmd ($cmd);
$t -> close;

return @output;
}

sub get_hostinfo {

my $devfile="hostsinfo.txt";
my $dir = getcwd();
$dir = ~s/\//\\/g;
$devfile=$dir."\\".$devfile;
print "\$devfile=${devfile}\n";
if (! (-f $devfile))
{
print "配置文件${devfile}不存在!\n";
return -1;
}
open(DEV,"{devfile}") || die "Can't open hostsinfo: $!";
while(<DEV>)
{
my ($ip, $user, $pawd) = split (/\s+/, $_);

}
close DEV;
}


my @hosts_info = get_hostinfo("hostsinfo.txt");
my ($hostname, $ip);
my ($username, $user);
my ($password, $pawd);
while (1) {
##print "$hostname : $ip\n";
my(@output);
@output = remoteExec ($ip, $user, $pawd, "echo \"hello\"" . $cmdstr);
print @output;
}
恳请大家帮我看看这个程序错在那儿,谢啦!
参数传不过来啊!原本想循环读文件的,读出一行处理一行,直至文件读完。
读的文件内容如下,中间用空格分开的。
192.168.1.2 root #@……1234as
192.168.1.3 oracle oracle
192.168.1.4 root #@……1234as
192.168.1.5 oracle oracle
jtyun 2012-09-12
  • 打赏
  • 举报
回复
其实我就是想通过读文件通过telnet的功能登录系统,怎么能通过读文件循环的传登录信息呢?
jtyun 2012-09-12
  • 打赏
  • 举报
回复
use strict;
use Net::Telnet;
my $cmdstr = $ARGV[0];
sub remoteExec {
my ($hostname) = $_[0];
my ($username) = $_[1];
my ($password) = $_[2];
my ($cmd) = $_[3];
my (@output);
my ($t);


$t = new Net::Telnet (Timeout => 30, Prompt => '/[\$%#>]/');
$t -> max_buffer_length("10485760");
$t -> input_log("logfile");
$t -> open ($hostname) || warn "Failed to connect to $hostname.";
$t -> login ($username, $password) || warn "Failed to login in to $hostname.";
@output = $t -> cmd ($cmd);
$t -> close;

return @output;
}

sub get_hostinfo {
my $devfile="hostsinfo.txt";
my $dir = getcwd();
$dir = ~s/\//\\/g;
$devfile=$dir."\\".$devfile;
print "\$devfile=${devfile}\n";
if (! (-f $devfile))
{
print "配置文件${devfile}不存在!\n";
return -1;
}
open(DEV,"{devfile}") || die "Can't open hostsinfo: $!";
while(<DEV>)
{
my ($ip, $user, $pawd) = split (/\s+/, $_);



}
close DEV;
}


my ($hostname, $ip);
my ($username, $user);
my ($password, $pawd);
while (1) {
##print "$hostname : $ip\n";
my(@output);

@output = remoteExec ($ip, $user, $pawd, "echo \"hello\"" . $cmdstr);
print @output;
}


还是没有解决这个程序的问题
这个程序不能把ip user pawd这个三个参数传出来,请大家帮我改改,谢啦!
文件格保存的内容如下,用两个空格分开的或者用tab键都行的。
192.168.1.2 root #@……1234as
192.168.1.3 oracle oracle
192.168.1.5 root $%~ws!56
jiuchang 2012-09-11
  • 打赏
  • 举报
回复
while循环把这个功能已经实现了
jtyun 2012-09-10
  • 打赏
  • 举报
回复
那接着读第二行怎么办呢?能在给讲解吗,谢谢啦!!
jtyun 2012-09-09
  • 打赏
  • 举报
回复
是读出文件的一行192.168.1.2 root #@……1234as
之后分别把ip,user,pass 这三个值赋给分别的变量
bugs2k 2012-09-09
  • 打赏
  • 举报
回复
#!/usr/bin/perl

while (<DATA>) {
@ds = split;
}

__DATA__
192.168.1.2 root #@……1234as
192.168.1.3 oracle oracle
bugs2k 2012-09-09
  • 打赏
  • 举报
回复
#!/usr/bin/perl

while (<DATA>) {
($ip, $user, $pswd) = split;
print "$ip | $user | $pswd\n";
}

__DATA__
192.168.1.2 root #@……1234as
192.168.1.3 oracle oracle

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧