我的剧本有什么问题,请告诉我

时间:2015-12-04 18:27:37

标签: linux perl

我需要在我的路由器上输入scipt并查找代码并与之前记录的此IP信息进行比较,如果没有更改,则停止脚本。

我运行这个脚本 - $ perl~ / test.pl

没有错误,但未创建文件my_ip.txt。

在原件脚本必须通过主机example.dyndns.org检查我的IP,但我的IP是灰色的。

所以我需要通过路由器来确定

#!/usr/bin/perl

    use LWP::UserAgent;

my $routeraddress = `addr admin:Tavolzhansky@192.168.1.1/RST_conn_status.htm`;
if ($routeraddress =~ /var info_get_wanip="((\d+\.){3}(\d+))"/) {

  my $ip = "$1.$2.$3.$4";

   #Добавлено:
  open (FILE,"my_ip.txt");
  my @lines = <FILE>;
  $old_ip = $lines[0]; #Считываем IP из файла
  $old_ip =~ s/^\s+|\s+$//g; #trim
  close(FILE);
  if ($old_ip eq $ip) {
    die "IP not changed"; # Выходим из скрипта, если IP не изменился
  }
  open (FILE,">my_ip.txt");
  print FILE $ip; # Записываем в файл новый IP
  close(FILE);
...... (this code is OK)
}

由于连接到路由器的问题

,请不要结束代码

2 个答案:

答案 0 :(得分:7)

$ perl -cw -e 'print `addr admin:foo@192.168.1.1/bar`'
Possible unintended interpolation of @192 in string at -e line 1.
-e syntax OK

它不起作用,因为@192被插值为数组,并且您正在运行命令addr admin:Tavolzhansky.168.1.1/RST_conn_status.htm而不是您想要的命令。

如果您要use warnings,如果您将使用调试器逐步执行代码,或者如Andy所建议的那样,如果您要检查返回值,则很容易发现并修复。

要让@192无法插值,请转义@

my $routeraddress = `addr admin:Tavolzhansky\@192.168.1.1/RST_conn_status.htm`;

答案 1 :(得分:2)

由于这个原因,它无法正常工作:

my $routeraddress = `addr admin:Tavolzhansky@192.168.1.1/RST_conn_status.htm`;
if ($routeraddress =~ /var info_get_wanip="((\d+\.){3}(\d+))"/) {
    ...
}

尝试添加几个调试打印以确认:

my $routeraddress = `addr admin:Tavolzhansky@192.168.1.1/RST_conn_status.htm`;
print "Router IP = $routeraddress/n";

if ($routeraddress =~ /var info_get_wanip="((\d+\.){3}(\d+))"/) {
    ...
} else {
    print "Router address didn't match.\n";
}

您应该使用严格和警告编译指示,但正如您所说,当您从其他来源获取IP时,此工作正常,其余代码将起作用。

我猜你正在阅读HTML页面,希望在某个地方看到这个字符串:

var info_get_wanip="xxx.xxx.xxx.xxx";

但是,你需要确认$ routeraddress是否真正得到了它,它看起来像是

my $routeraddress = `addr admin:Tavolzhansky@192.168.1.1/RST_conn_status.htm`;

实际上只是对页面发出get请求,但是没有返回&#34; var info_get_wanip =&#34; xxx.xxx.xxx.xxx&#34 ;;&#34;。如果你对变量$ routeraddress的赋值进行排序,那么它就可以工作。

我无法说出如何,因为我不知道它现在回来了。