0

ある変数が別の変数よりも大きいかどうかをテストしています。if評価は、値が何であっても同じ値を取得しています。

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

私はこれを複数の方法で試しましたが、機能させることができません。何か案は?

4

3 に答える 3

1

<辞書式に比較します。整数を比較する場合は、を使用します-lt。浮動小数点数を比較する場合は、bcの代わりにを使用してくださいtest

于 2012-09-09T16:42:14.840 に答える
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
于 2012-09-09T16:48:31.817 に答える
0

数値比較またはリテラル(文字列)比較をお探しですか?どちらかによって、異なる演算子が必要になる場合があります。

于 2012-09-09T16:42:50.237 に答える