我尝试执行下面的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
答案 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