试图让Perl脚本正确计算来自进程grep的结果数
全部, 我试图grep一个特定的进程,该进程的输出中包含列出的路径(显示在@t_进程数组中)。默认情况下,计数将始终为1,因为用于grep的命令也将显示在输出中。因此,我使用的是,如果计数大于1,那么它确实正在运行。当我grep它们时,所有这些进程都启动了,并且至少有两个结果返回到命令行。但是,当我运行脚本时,我只返回print语句:“Process$t_Process is matched!it running?…”。有人能提供一些指导吗试图让Perl脚本正确计算来自进程grep的结果数,perl,grep,Perl,Grep,全部, 我试图grep一个特定的进程,该进程的输出中包含列出的路径(显示在@t_进程数组中)。默认情况下,计数将始终为1,因为用于grep的命令也将显示在输出中。因此,我使用的是,如果计数大于1,那么它确实正在运行。当我grep它们时,所有这些进程都启动了,并且至少有两个结果返回到命令行。但是,当我运行脚本时,我只返回print语句:“Process$t_Process is matched!it running?…”。有人能提供一些指导吗 use strict; use warnings;
use strict;
use warnings;
sub main
{
my @t_processes = (
'/hosting/configs/tomcat7/prod-06_fc' ,
'/hosting/configs/tomcat7/prod-07_fc',
'/hosting/configs/tomcat7/prod-07',
'/hosting/configs/apache22/prod-06_fc/',
'/hosting/configs/jboss6/jb-prod-06'
);
foreach
my $t_process(@t_processes)
{
my $match_count = 0;
if(`ps -aef | grep -i $t_process`)
{
print "Process $t_process is matched! Is it running?....";
if($match_count > 1)
{
print "The process is running\n ";
}
else
{
$match_count++
}
}
else
{
print "The process $t_process is not running, please start it!\n" ;
}
}
}
main();
您的grep-if条件总是成功的,因为grep本身产生一个结果,因此if条件总是满足的 试着跑步
if(`ps -aef | grep -i $t_process | grep -v grep`)
您的grep-if条件总是成功的,因为grep本身产生一个结果,因此if条件总是满足的 试着跑步
if(`ps -aef | grep -i $t_process | grep -v grep`)
正如我在评论你的OP时所说,你的
$match\u count
逻辑存在致命缺陷。首先,在for()
循环中声明它,这将在每个进程上将其重置为零。第二,除非稍后在else()
语句中,否则永远不会为其赋值;到那时,你就要跳出圈套了
这里有一个更简单的方法:
use strict;
use warnings;
my @t_processes = qw(nginx blah);
for my $t_process(@t_processes){
if(`ps -aef | grep -i $t_process | grep -v grep`){
print "$t_process is running\n";
next;
}
print "$t_process is not running, please start it!\n" ;
}
输出:
nginx is running
blah is not running, please start it!
正如我在评论你的OP时所说,你的
$match\u count
逻辑存在致命缺陷。首先,在for()
循环中声明它,这将在每个进程上将其重置为零。第二,除非稍后在else()
语句中,否则永远不会为其赋值;到那时,你就要跳出圈套了
这里有一个更简单的方法:
use strict;
use warnings;
my @t_processes = qw(nginx blah);
for my $t_process(@t_processes){
if(`ps -aef | grep -i $t_process | grep -v grep`){
print "$t_process is running\n";
next;
}
print "$t_process is not running, please start it!\n" ;
}
输出:
nginx is running
blah is not running, please start it!
你的逻辑有致命的缺陷
$match\u count
永远不会超过零,因为在每次for()
循环开始时都会重置它。不仅如此,当你检查它是否大于1(它不能大于1)时,它是零,然后进入else()
和++
它,但是没有任何东西会看到增加的值,因为你只是在那之后开始下一个循环。你的逻辑有致命的缺陷$match\u count
永远不会超过零,因为在每次for()
循环开始时都会重置它。不仅如此,当您检查它是否大于1(它不能大于1)时,它是零,然后进入else()
和++
它,但是没有任何东西会看到增加的值,因为您只是在那之后开始下一个循环。