shell脚本命令错误

时间:2017-03-30 12:14:48

标签: shell cpu

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

 if (top -bn1 | grep "Cpu(s)" | awk '{print$2}' | 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

2 个答案:

答案 0 :(得分:0)

我不确定你使用的是什么外壳,但是如果你使用Bash,那么命令就是这样的:

#!/bin/bash

# ... code ...

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

以下是验证的简单代码:

#!/bin/bash
op=$(top -bn1 | grep "Cpu(s)" | awk '{print$2}' | 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

答案 1 :(得分:0)

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

top -bn1 | awk 'NR == 3 { f=($2 > 1) } END{exit !f}'  && echo "yadda yadda"

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

输出:

yadda yadda

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

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

输出(在我的系统上):

18.6 > 1