오류 [:-lt: 쉘 스크립트 Linux에 단항 연산자가 필요함 [닫기]

오류 [:-lt: 쉘 스크립트 Linux에 단항 연산자가 필요함 [닫기]

오류가 발생했습니다. [: -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

+1s 뒤의 모든 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

더 좋은 점은 외부 유틸리티를 사용하는 모든 코드를 expr쉘 자체의 내부 산술 확장을 사용하도록 변경하는 것입니다. 따라서 코드는 다음과 같습니다.

temp=`expr $temp +1`

...다음으로 변경되어야 합니다.

temp=$(($temp + 1))

또는,존재하다bash, 전체 줄은 다음으로 대체될 수 있습니다.

((temp++))

관련 정보