2012-09-09 91 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

您是否在尋找數值比較或文字(字符串)比較呢?根據哪一個可能需要不同的操作員。