if语句没有正确计算bash

if语句没有正确计算bash,bash,if-statement,Bash,If Statement,我正在测试一个变量是否大于另一个变量。无论值是什么,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/sa0

我正在测试一个变量是否大于另一个变量。无论值是什么,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 }

我尝试过多种方法,但都无法使其工作。有什么想法吗?

您是在寻找数字比较还是文字(字符串)比较?可能需要不同的操作员,具体取决于哪个操作员。

是的,正如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

比这更糟糕的是,因为$avg的
(对于$file的文件(ls/var/log/sa/sa/sa[0123]*);do echo$file;done);执行
。。。这是个玩笑吗??您是指/var/log/sa/sa[0123]*中的平均值
;是吗?这件衣服穿起来会更合身。有太多的事情要改变。。。
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