FTP使用特定的用户名进入服务器

0 ftp perl

我试图ftp到服务器,一旦我在那里,我想得到一个文件,然后睡了5分钟后把它放回去.我有那个部分是正确的,但我在代码中添加了两个在执行代码时输入的变量.用户将输入他们想要连接的用户名.我虽然连接有问题.当我输入用户名t14pb时,它仍然会转到第一个if语句,就像我说t14pmds一样.这是代码:

#!/usr/bin/perl

use Net::FTP;

$host     = "fd00p02";
$username = "$ARGV[0]";
$ftpdir   = "/";
$file     = "$ARGV[1]";

print "$username\n";
print "$file\n";

if ($username == t14pmds) {

  $password = "test1";

  $ftp = Net::FTP->new($host) or die "Error connecting to $host: $!";
  $ftp->login($username, $password) or die "Login failed: $!";
  $ftp->cwd($ftpdir) or die "Can't go to $ftpdir: $!";
  $ftp->get($file) or die "Can't get $file: $!";

  sleep 5;

  $ftp->put($file) or die "Can't put $file: $!";
  $ftp->quit or die "Error closing ftp connection: $!";
}

if ($username == t14pb) {

  $password = "test2";

  $ftp = Net::FTP->new($host) or die "Error connecting to $host: $!";
  $ftp->login($username, $password) or die "Login failed: $!";
  $ftp->cwd($ftpdir) or die "Can't go to $ftpdir: $!";
  $ftp->get($file) or die "Can't get $file: $!";

  sleep 5;

  $ftp->put($file) or die "Can't put $file: $!";
  $ftp->quit or die "Error closing ftp connection: $!";
}

if ($username == t14pmds_out) {

  $password = "test3";

  $ftp = Net::FTP->new($host) or die "Error connecting to $host: $!";
  $ftp->login($username, $password) or die "Login failed: $!";
  $ftp->cwd($ftpdir) or die "Can't go to $ftpdir: $!";
  $ftp->get($file) or die "Can't get $file: $!";

  sleep 5;

  $ftp->put($file) or die "Can't put $file: $!";
  $ftp->quit or die "Error closing ftp connection: $!";
}

if ($username == t14fiserv) {

  $password = "test4";

  $ftp = Net::FTP->new($host) or die "Error connecting to $host: $!";
  $ftp->login($username, $password) or die "Login failed: $!";
  $ftp->cwd($ftpdir) or die "Can't go to $ftpdir: $!";
  $ftp->get($file) or die "Can't get $file: $!";

  sleep 5;

  $ftp->put($file) or die "Can't put $file: $!";
  $ftp->quit or die "Error closing ftp connection: $!";
}
Run Code Online (Sandbox Code Playgroud)

amo*_*mon 5

Perl标量有两种形式:stringy和numeric.您使用测试数字相等性==.字符串被认为等于零,如果它们看起来不像数字.这就是第一个分支始终执行的原因(0 == 0).

你测试了与字符串等价eq,所以你想要比较if ($username eq "foo") {...}.

但是,if-brances中的代码不会更改,因此您可以将公共代码移到外面.剩下的是用户名和密码之间的映射 - 哈希适用于:

my %uname_2_passwd = (
   t14pmds => "test1", # LHS of "=>" is auto-quoted, 
   ...                 # if it would be a valid variable name.
);

my $password = $uname_2_passwd{$username};

# common code here
Run Code Online (Sandbox Code Playgroud)

另外,请use strict; use warnings在脚本的顶部.这可能会指出大多数错误(例如忘记引号,或者不使用eq进行字符串比较,或者在数字比较中使用字符串,或者不声明变量).