使用shell脚本比较cpuusage值

时间:2012-03-28 14:41:20

标签: linux shell unix command

如何使用shell脚本比较CPU使用率值,我得到一个错误,因为[:=:一行运算符在if [ $message -ne "" ]行预期

   #!/bin/sh

    expected_cpuusage="95"
    cpu_usage=`top -n 1 -b|grep Cpu|awk '{print $2}'|cut -d"%" -f1""`
    message=""
    if [ $cpu_usage -gt $expected_cpuusage ]    ##{x%?}
    then
       echo "CPU usage exceeded";
       if [ $message -ne "" ]
       then
         message="$message\n\nCPU usage exceeded configured usage limit \nCurrent CPU usage is $cpu_usage\nConfigured CPU usage is $expected_cpuusage";
       else
         message="CPU usage exceeded configured usage limit \nCurrent CPU usage is $cpu_usage\nConfigured CPU usage is $expected_cpuusage";
       fi ;
    fi

2 个答案:

答案 0 :(得分:2)

Use more quotes

if [ "$message" -ne "" ]

否则空字符串会弄乱表达式。

更好:

if [ -n "$message" ]

答案 1 :(得分:0)

>是一个重定向运算符。你想要-gt

if [ $cpu_usage -gt $expected_cpuusage ]

这要求$ cpu_usage看起来像一个整数,如果没有则会失败并产生错误。 (即,如果它包含0-9以外的字符。-gt不会比较浮点值,因此包含'。'的字符串将不起作用。)对于浮点比较,请使用expr:

if expr $cpu_usage \> $expected_cpuusage > /dev/null; then 

使用像[[,但这些构造限制脚本的可移植性的bash内置函数)进行比较有更简单的方法。 当您使用空字符串时,会出现另一个错误。尝试使用引号:

if [ "$message" -ne "" ]

但使用起来要清楚得多:

if [ -n "$message" ]