免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: liuqiong023
打印 上一主题 下一主题

perl写入以及读取文件 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-11-06 17:41 |只看该作者
都是好人啊,尤其是Y龙-鬼先生 ,还没有见过这么好的人呀。
感动ing,

我先试试看。。

@mcshell ,我在做 vmware esxi host的关机测试,需要用户输入每一台需要关闭的主机用户名和密码,并保存起来,然后软件根据特定的关机条件,每次去解析用户名和密码,实现关机功能

论坛徽章:
0
12 [报告]
发表于 2012-11-07 15:11 |只看该作者
大家好,我按照Y龙-鬼先生的代码,运行,如果带参数config,能正确的将主机和用户名,密码(有加密)写入config.log文档中.
如果是带参数shutdown,  从config.log我打印出 print $line;读取到的每行都是对的,但是无法打印出主机,用户名和密码,好像用split获取不到。提示use of uninitialized value $_ in spilt,use of uninitialized value $host in print,,,
错误的图片如附件


我的完整脚本如下,
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use warnings;
  4. use VMware::VIRuntime;
  5. use MIME::Base64;

  6. my %opts = (
  7.         level => {
  8.         type => "=s",
  9.         help => "level [shutdown|config]",
  10.         required => 1,
  11.         default => "shutdown",
  12.         },
  13. );

  14. Opts::add_options(%opts);
  15. Opts::parse();
  16. #Opts::validate();

  17. my $level = Opts::get_option('level');
  18. my $log_output_config = "config.log";

  19. if ($level eq "config") {

  20.                 open(FILE,">>$log_output_config");
  21.                 print "Enter your target host ip or hostname:\n";
  22.                 my $inputhost = <STDIN>;
  23.                 chomp($inputhost);
  24.                 exit if($inputhost=~/\bexit\b/);
  25.                 print(FILE "$inputhost\t\t");
  26.   
  27.                 print "Enter your host username:\n";
  28.                 my $inputusername = <STDIN>;           
  29.                 chomp($inputusername);
  30.                 exit if($inputusername=~/\bexit\b/);
  31.                 print(FILE "$inputusername\t\t");
  32.               
  33.                 system "stty -echo";
  34.                 print "Enter your host password:\n";
  35.                 my $inputpasswd = <STDIN>;
  36.                 chomp($inputpasswd);
  37.                 exit if($inputpasswd=~/\bexit\b/);
  38.                 my $encryppasswd = encode_base64($inputpasswd);
  39.                 system "stty echo";
  40.                 print(FILE $encryppasswd);
  41.                 close(FILE);
  42.                 exit;
  43. }
  44. &shutdownHost;


  45. # Shutdown target host
  46. sub shutdownHost {
  47.     my ($log_output_config) =  "config.log";
  48.     my $HANDLE;
  49.     open (HANDLE, $log_output_config) or die("ERROR: Can not locate \$log_output_config\" input file!\n");
  50.     my @lines = <HANDLE>;
  51.     my @errorArray;
  52.     my $line_no = 0;

  53.     close(HANDLE);
  54.     foreach my $line (@lines) {
  55.         $line_no++;
  56.         &trim($line);
  57.         print $line;
  58.         if($line) {
  59.             if($line =~ /^\s*:|:\s*$/){
  60.                 print "Error in Parsing File at line: $line_no\n";
  61.                 print "Continuing to the next line\n";
  62.                 next;
  63.             }
  64.                 (my $host, my $user, my $passwd) = split($line);               
  65.                 my $decryppasswd = decode_base64($passwd);
  66.                 print $host;
  67.                 print $user;
  68.                 print $decryppasswd;
  69.                 my $result_output = `./ghettoShutdown.pl --server $host --username $user --password $decryppasswd`;
  70.             
  71.             

  72.         }
  73.     }
  74. }

  75. sub trim($)
  76. {
  77.     my $string = shift;
  78.     $string =~ s/^\s+|\s+$//g;
  79.     return $string;
  80. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2012-11-07 15:16 |只看该作者
就是写入没有问题了,但是读取,只能正确读取到每一行,但是无法从每一行中,解析获取到对应的的主机,用户名和密码

论坛徽章:
0
14 [报告]
发表于 2012-11-07 16:02 |只看该作者
错误图片如附件

error.JPG (86.96 KB, 下载次数: 18)

error.JPG

论坛徽章:
0
15 [报告]
发表于 2012-11-07 16:42 |只看该作者
哈哈,成功了
要用下面这个方法来获取,
(my $host, my $user, my $passwd) = split(/\s+,$line);
空格来分别获取对应的主机名,用户名,密码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP