脚本 - if grep "Used : X GB" > Y then

脚本 - if grep "Used : X GB" > Y then

我在互联网上搜索了一种查询 ESXi 主机使用 RAM 的方法,我发现了一种方法,其中甚至包含了启动时使用的 Mhz,并且输出结果不错。我真正的最终目标是获得 XYMon 脚本来监视输出。我可以制作 XYMon 脚本,但我不知道如何让该IF THEN语句发挥作用。

这是我的查询的输出:

[Host] Name                    : esxi.domain.com
[Host] CPU Detail              : Processor Sockets: 1, Cores per Socket 4
[Host] CPU Type                : Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
[Host] CPU Usage               : Used: 836 Mhz, Total: 16028 Mhz
[Host] Memory Usage            : Used: 59 GB, Total: 64 GB

我需要一份IF THAN声明,基本上说如果(已使用的 RAM 数量)大于 (Y),则。

如果可以使脚本可移植,我希望有一个IF(已用 RAM 数量)>(RAM 总量百分比)THEN。这样我就可以发布脚本,人们可以使用它而无需修改参数Y

答案1

百分比可以这样找到:

CMD > /tmp/esxihealth
percent=$(awk '/Memory Usage/ { printf "%d\n",100*$6/$9+.5 ;}' /tmp/esxihealth)

不需要那么多管道。

在 awk 中将$6选择第 6 个字段(默认情况下字段由一个或多个空格或制表符分隔)。

答案2

我不是最伟大的bash脚本编写者,所以有人可能有更优雅的解决方案,但下面的解决方案有效。您的Y变量是threshold脚本中的变量,包含您给出的数据的文件的名称称为memstats

#!/bin/bash

memory=$(grep "Memory Usage" memstats | grep -o '[0-9]*' | tr '\n' ' ')
used=$(echo $memory | cut -d' ' -f1)
total=$(echo $memory | cut -d' ' -f2)


threshhold=50

if (($used > $threshhold)); then
        echo "do this (used is greater than threshold)"
else
        echo "do this else (used is less than threshold)"
fi

答案3

#/bin/bash

memory=$(grep "Memory Usage" /tmp/esxihealth | grep -o '[0-9]*' | tr '\n' ' ')
ramused=$(echo $memory | cut -d' ' -f1)
ramtotal=$(echo $memory | cut -d' ' -f2)
rampercent=$((200*$ramused/$ramtotal % 2 + 100*$ramused/$ramtotal))
ramthreshold=95

if (( rampercent > ramthreshold )); then
        ramhigh=true
fi

cpu=$(grep "CPU Usage" /tmp/esxihealth | grep -o '[0-9]*' | tr '\n' ' ')
cpuused=$(echo $cpu | cut -d' ' -f1)
cputotal=$(echo $cpu | cut -d' ' -f2)
cpupercent=$((200*$cpuused/$cputotal % 2 + 100*$cpuused/$cputotal))
cputhreshold=90

if (( cpupercent > cputhreshold )); then
       cpuhigh=true
fi

if [ ! -z "$ramhigh" ] || [ ! -z "$cpuhigh" ]; then
    ...
else
    ...
fi

相关内容