Shi*_*Tio 0 linux shell-script test
我收到错误 [: -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
Run Code Online (Sandbox Code Playgroud)
尝试将+1
s 之后的所有s更改expr
为+ 1
。
没有空格expr
将返回错误并且$temp
为空。如果$temp
为空,则将-lt
空格与数字进行比较,这就是出现错误的原因。这是一个重现该问题的衬垫:
t=0;t=`expr $t +1`;[ $t -lt 25 ]
Run Code Online (Sandbox Code Playgroud)
输出(到 STDERR):
expr: syntax error
bash: [: -lt: unary operator expected
Run Code Online (Sandbox Code Playgroud)
更好的是,将所有使用外部 util 的代码更改expr
为使用 shell 自己的内部算术扩展。所以代码如下:
temp=`expr $temp +1`
Run Code Online (Sandbox Code Playgroud)
...应改为:
temp=$(($temp + 1))
Run Code Online (Sandbox Code Playgroud)
或者,在 中bash
,整行可以替换为:
((temp++))
Run Code Online (Sandbox Code Playgroud)