我差不多完成了一个nagios插件,我正在使用这个guide.我收到了错误但是我不知道为什么。
<ul class="mostread<?php echo $moduleclass_sfx; ?>">
<?php
$first = true;//initially set true
foreach ($list as $item) : ?>
<?php $images = json_decode($item->images); ?>
if($first==true){ ?> //checks $first is true if true prints
<?php if( $images->image_intro ) : ?>
<img src="<?php echo $images->image_intro; ?>" alt="<?php echo htmlspecialchars($item->title); ?>" />
<?php endif;
<li itemscope itemtype="https://schema.org/Article">
<a href="<?php echo $item->link; ?>" itemprop="url">
<span itemprop="name">
<?php echo $item->title; ?>
</span>
</a>
</li>
<?php
}
$first = false;//after printing first item set it false
endforeach; ?>
</ul>
我在#!/bin/perl
use strict;
use warnings;
my $warn = 20;
my $crit = 50;
my $percent_down = 10;
my $percent_up = 90;
my $err = "error";
given ($percent_down) {
when ($percent_down lt $warn) { print "OK - $percent_up% UP"; exit 0;}
when ($percent_down ge $warn && lt $crit ) { print "WARNING - $percent_down% DOWN"; exit (1);}
when ($percent_down ge $crit) { print "CRITICAL - $percent_down% DOWN"; exit (2);}
default { print "UNKNOWN - $err "; exit (3);}
}
处的given ($percent_down) {
开始语法错误,然后在") {"
之后的每一行开始语法错误。
答案 0 :(得分:4)
要使用given
,您需要
no if $] >= 5.018, warnings => "experimental::smartmatch";
use feature qw( switch );
此外,
$percent_down ge $warn && lt $crit
应该是
$percent_down ge $warn && $percent_down lt $crit
现在针对您没有提出的问题。
lt
和ge
用于比较字符串。使用<
和>=
来比较数字。 (例如,9 ge 10
为真。)
最后,您不应该使用given
- when
。这是一个实验性功能,将来会以向后兼容的方式删除或更改
解决上述问题并删除冗余检查后,您将看到以下内容:
if ($percent_down < $warn) {
print "OK - $percent_up% UP";
exit(0);
}
if ($percent_down < $crit) {
print "WARNING - $percent_down% DOWN";
exit(1);
}
print "CRITICAL - $percent_down% DOWN";
exit(2);
答案 1 :(得分:1)
出于多种原因,建议您避免given
和when
。即使您正确启用了该功能,您也会收到另一条警告消息,告诉您该功能是实验性的,并且无论如何您都没有使用该功能有用的功能 - 主要是智能匹配,这也是实验性的< / p>
永远不能输入最后的when
块,因为前面的条件涵盖了所有可能性
我建议您使用if
elsif
else
这样的序列来编写它。我相信它更具可读性
#!/bin/perl
use strict;
use warnings 'all';
my $warn = 20;
my $crit = 50;
my $percent_down = 10;
my $percent_up = 100 - $percent_down;
if ( $percent_down < $warn ) {
print "OK - $percent_up% UP";
exit 0;
}
elsif ( $percent_down < $crit ) {
print "WARNING - $percent_down% DOWN";
exit 1;
}
else {
print "CRITICAL - $percent_down% DOWN";
exit 2;
}
答案 2 :(得分:-2)
感谢评论,我明白了。
if ($percent_down lt $warn) {
print "OK - $percent_up% UP";
exit 0;
} elsif ($percent_down ge $warn && $percent_down lt $crit ) {
print "WARNING - $percent_down% DOWN";
exit 1;
} elsif ($percent_down ge $crit) {
print "CRITICAL - $percent_down% DOWN";
exit 2;
} else {
print "UNKNOWN - $err ";
exit 3;
}