shell脚本命令错误

shell script command error

我尝试执行下面的 CPU 监控脚本,但脚本抛出错误。但是直接执行 top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g' 不会抛出错误。有人可以帮忙吗??

 if (top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g') -gt 1 ; then
     echo ('CPU percentage is $CPU_PER, which is higher than 50%. Kindly login to server and validate the process.')
 else 
     echo  ('Executing Else statement.')
 fi

我不确定 shell 您使用的是什么,但如果您使用 Bash,命令将如下所示:

#!/bin/bash

# ... code ...

op=$(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
if [ "y" = "$(echo | awk "($op > 1) { print \"y\"; }")" ]; then
    echo 'CPU Percentage is grater Which is Highere than 50% Kindly Login to server and validate the process' 
else 
    echo  'Excuting Else statement ' 
fi

此外,由于 $(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g') 并不总是 return 整数,因此正常的 -gt 不起作用。这就是我在此示例中使用 awk 的原因。它也可以用 bc 完成,但由于并非所有发行版都预安装了该命令,我认为上面的版本在这种情况下是最好的。

这里是验证的纯代码:

#!/bin/bash
op=$(top -bn1 | grep "Cpu(s)" | awk '{print}' | sed -e 's/%us,//g')
num=1
if [ "y" = "$(echo | awk "($op > $num) { print \"y\"; }")" ]; then
    printf "\n${op} is bigger than ${num}\n\n"
else 
    printf "\n${op} is smaller than ${num}\n\n"
fi

不用大惊小怪,awk可以进行解析,小数比较,然后输出一个退出状态。任何带有 true/false 退出状态 的代码都可以在 if 之后或 &&:

之前使用
top -bn1 | awk 'NR == 3 { f=( > 1) } END{exit !f}'  && echo "yadda yadda"

awk 代码只检查第 3 行:NR == 3;然后将第二项与 1 进行比较:( > 1);并将 true/false 值存储在 f 中,并输出 exit !f 的逻辑非,因此 unix shell 可以理解。

输出:

yadda yadda

awk 代码中添加 print 允许同时将值存储到 shell 变量 $n:

if n=$(top -bn1 | \
       awk 'NR == 3 { print  ; f=( > 1) } END{exit !f}') ; \
then echo "$n > 1" ; else echo "$n <= 1" ; fi

输出(在我的系统上):

18.6 > 1