2012-09-09 93 views
0

我正在测试一个变量是否大于另一个变量。如果评估值得到相同的值,不管值是什么。如果陈述没有正确评估bash

COMP(){ 
avg=$(for avg in $(for file in $(ls /var/log/sa/sa[0123]*); do echo $file; done); do sar -r -f $avg| tail -1; done | awk '{totavg+=$4} END {print (totavg/NR)*5}'); 
for comp in $(sar -r -f /var/log/sa/sa08 | egrep -v "^$|Average|CPU|used" | awk '{print $5}'); do 
     if [ `echo $avg` < `echo $comp` ]; 
       then echo 'You have had a spike!'; 
       echo "COMP = $comp"; 
       echo "AVG = $avg"; 
     fi; 
done } 

我得到这个输出,即使数值没有真正评估为true。

You have had a spike! 
COMP = 41.20 
AVG = 145.438 
You have had a spike! 
COMP = 41.20 
AVG = 145.438 
You have had a spike! 
COMP = 41.19 
AVG = 145.438 
You have had a spike! 
COMP = 41.24 
AVG = 145.438 

我已经尝试了这种多种方式,但无法让它工作。有任何想法吗?

+1

'的AVG在$((文件在$ LS /无功/日志/ SA/SA [0123] *);做回声$文件;完成);做'...这是一个笑话吗?你的意思是'在/ var/log/sa/sa中输入avg *;做',不是吗? – tripleee

+0

这会更适合[codereview](http://codereview.stackexchange.com/)。有很多事情要改变...... – l0b0

回答

1

没错作为ingnacio指出

average=`echo $avg`; 
comp1=`echo $comp` 

    if ((average)) 2>/dev/null; then 
    average=$((average)) 
    else 
    average=0; 
    fi 
if ((comp1)) 2>/dev/null; then 
    comp1=$((comp1)) 
    else 
    comp1=0; 
    fi 

if [ $average -lt $comp1 ];then 
1

<字典顺序进行比较。如果你想比较整数,然后使用-lt。如果要比较浮点数,则使用bc而不是test

+1

它比这更糟糕,因为'<'没有被引用或转义,它将被视为输入重定向而不是操作符。 –

0

您是否在寻找数值比较或文字(字符串)比较呢?根据哪一个可能需要不同的操作员。