我正在发现Perl语言。我试图创建一个脚本来集成我的Nagios服务器,但是我有两个无法解决的错误。你能帮帮我吗?
这些错误如下:
在级联中使用未初始化值$5 (.)或check_disque.pl第53行处的字符串。 参数"/dev/mapper/centos-root 50G 5,5G45G11 /\n“不是check_disque.pl第55行的数值lt (<)。
我的第55行:
$espace_utilise=`df -h / | awk 'FNR == 2 {print $5}' | sed 's/%//g'`;第56行:
if ($espace_utilise < $warning) {发布于 2022-03-14 10:44:18
$espace_utilise=`df -h / | awk 'FNR == 2 {print $5}' | sed 's/%//g'`;
# ^^--- here backticks内插变量,因此$5将被Perl插值。您可以通过用反斜杠\$5转义美元符号来解决这个问题,或者使用qx'',这与反号一样,但是单引号分隔符禁止内插。不过,这将导致awk/sed命令出现一些问题。这就需要更多的逃跑。这就是在Perl中使用shell命令的原因之一。
$espace_utilise=`df -h / | awk 'FNR == 2 {print \$5}' | sed 's/%//g'`;
$espace_utilise=qx'df -h / | awk \'FNR == 2 {print $5}\' | sed \'s/%//g\'';幸运的是,您可以直接执行df命令并使用Perl命令进行文本处理,这将更加容易。我会帮你,但我不知道那个awk命令到底是干什么的。我猜:
$espace_utilise=`df -h /`; # get the line
my $df = (split ' ', $espace_utilise)[4]; # get the 5th field
$df =~ s/%//g; # remove %. Can also use tr/%d//d另一个错误是:
参数"/dev/mapper/centos-root 50G 5,5G45G11 /\n“不是check_disque.pl第55行的数值lt (<)。我的第55行:
...is仅仅因为第一条语句失败了。Perl内插$5,尽管它会发出警告,但是它变成了空字符串。所以你的awk线就是{ print },我想这和打印整条线是一样的。所以如果你修复了第一部分,你可以忽略这一点。
发布于 2022-03-14 09:44:47
我正在发现PERL语言。
然后看看CPAN。在许多模块中,有Filesys::DiskSpace,它可以做您想做的事情。你需要先安装它。为了做到这一点,您需要学习如何从CPAN中获取安装模块,
cpan App::cpanminus
cpanm Filesys::DiskSpace应该在你的案子里起作用。注意,如果您之前没有使用cpan,它可能会问您是否希望它自动配置自己。按回车说好。
安装后的使用非常简单,如
use Filesys::DiskSpace;
($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df $dir;请注意,它没有隐式提供百分比,因此需要遵循df行为。
The percentage of the normally available space that is currently allocated to all
files on the file system. This shall be calculated using the fraction:
<space used>/( <space used>+ <space free>)
expressed as a percentage. This percentage may be greater than 100 if <space free> is less
than zero. The percentage value shall be expressed as a positive integer, with any
fractional result causing it to be rounded to the next highest integer.https://stackoverflow.com/questions/71465087
复制相似问题