错误 [: -lt: 在 shell 脚本 Linux 中需要一元运算符

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)

agc*_*agc 9

尝试将+1s 之后的所有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)