错误

错误

我收到错误 [:-lt:需要一元运算符运行下面的脚本后,任何人都可以分享想法吗?

temp=0
while [ $temp -lt 25 ]
do
    sleep 1
        echo "running.."

   if [ $temp -eq 5 ]
   then
         top -bc -d 5 -n 1|sed -n '7,8p'|awk '{print $1,$9}'>>out.txt
         temp=`expr $temp +1`
         break
   elif [ $temp -eq 20 ]
   then
         top -bc -d 5 -n 1|sed -n '7,8p'|awk '{print $1,$9}'>>out.txt
         temp=`expr $temp +1`
   else
    temp=`expr $temp +1`
   fi
done

答案1

尝试将s+1后面的所有 s 更改为。 expr+ 1

如果没有空格,expr将会返回错误并且$temp为空。如果$temp为空,则将-lt比较空格与数字,这就是出现错误的原因。这是重现该问题的单行代码:

t=0;t=`expr $t +1`;[ $t -lt 25 ]

输出(到 STDERR):

expr: syntax error
bash: [: -lt: unary operator expected

更好的是,将使用外部 util 的所有代码更改expr为使用 shell 自己的内部算术扩展。所以代码如下:

temp=`expr $temp +1`

...应改为:

temp=$(($temp + 1))

或者,bash,整行可以替换为:

((temp++))

相关内容