오류가 발생했습니다. [: -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
+1
s 뒤의 모든 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++))