我收到错误 [:-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++))