首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未初始化值$5和参数在数值lt (<)中的使用不是数值

未初始化值$5和参数在数值lt (<)中的使用不是数值
EN

Stack Overflow用户
提问于 2022-03-14 08:53:33
回答 2查看 117关注 0票数 0

我正在发现Perl语言。我试图创建一个脚本来集成我的Nagios服务器,但是我有两个无法解决的错误。你能帮帮我吗?

这些错误如下:

在级联中使用未初始化值$5 (.)或check_disque.pl第53行处的字符串。 参数"/dev/mapper/centos-root 50G 5,5G45G11 /\n“不是check_disque.pl第55行的数值lt (<)。

我的第55行:

代码语言:javascript
复制
$espace_utilise=`df -h / | awk 'FNR == 2 {print $5}' | sed 's/%//g'`;

第56行:

代码语言:javascript
复制
if ($espace_utilise < $warning) {
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-14 10:44:18

代码语言:javascript
复制
$espace_utilise=`df -h / | awk 'FNR == 2 {print $5}' | sed 's/%//g'`;
#                                               ^^--- here 

backticks内插变量,因此$5将被Perl插值。您可以通过用反斜杠\$5转义美元符号来解决这个问题,或者使用qx'',这与反号一样,但是单引号分隔符禁止内插。不过,这将导致awk/sed命令出现一些问题。这就需要更多的逃跑。这就是在Perl中使用shell命令的原因之一。

代码语言:javascript
复制
$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命令到底是干什么的。我猜:

代码语言:javascript
复制
$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 },我想这和打印整条线是一样的。所以如果你修复了第一部分,你可以忽略这一点。

票数 2
EN

Stack Overflow用户

发布于 2022-03-14 09:44:47

我正在发现PERL语言。

然后看看CPAN。在许多模块中,有Filesys::DiskSpace,它可以做您想做的事情。你需要先安装它。为了做到这一点,您需要学习如何从CPAN中获取安装模块,

代码语言:javascript
复制
cpan App::cpanminus
cpanm Filesys::DiskSpace

应该在你的案子里起作用。注意,如果您之前没有使用cpan,它可能会问您是否希望它自动配置自己。按回车说好。

安装后的使用非常简单,如

代码语言:javascript
复制
use Filesys::DiskSpace;
($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df $dir;

请注意,它没有隐式提供百分比,因此需要遵循df行为。

代码语言:javascript
复制
      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.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71465087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档