我有一个Perl脚本,它应该从系统命令读取输入,即service $service status
,其中$service
指向存储在数组结构中的用户输入。用户应该可以一次检查单个服务,例如 ssh 或多个服务,例如 ssh,named,cups ,其中服务由逗号分隔。然后,程序将服务拆分为一个数组,并为每个用户指定的服务调用该命令。
我的程序代码如下所示。
print "Please provide the service name that you wish to analyze (Named service):\n";
my $service_name_input = <>;
chomp($service_name_input);
my @service_list = split(/,/, $service_name_input);
foreach my $service (@service_list)
{
open(my $service_input, '-|', "service", $service, "status");
}
while (my $line = <$service_input>)
{
#Matches for "running".
if ($line =~ m/(\(running\))/)
{
print "The service $service is running.\n";
}
#Matches for "dead".
elsif ($line =~ m/(dead)/)
{
print "The service $service is dead.\n";
}
}
这里的问题是程序需要在while语句中为$service_input
显式包名,在打印时需要$service
,尽管它们已经被分配了。任何有关解决方案的指导都将受到高度赞赏。
答案 0 :(得分:1)
$service_input
和$service
仅在您for
循环中可见,因为您在那里定义它。我认为您的while
循环应该在for
循环中移动。
您必须将代码更改为此
for my $service ( @service_list ) {
open( my $service_input, '-|', 'service', $service, 'status' );
while ( my $line = <$service_input> ) {
if ( $line =~ /\(running\)/ ) {
print "The service $service is running.\n";
}
elsif ( $line =~ /dead/ ) {
print "The service $service is dead.\n";
}
}
}