![오류 [:-lt: 쉘 스크립트 Linux에 단항 연산자가 필요함 [닫기]](https://linux55.com/image/146255/%EC%98%A4%EB%A5%98%20%5B%3A-lt%3A%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20Linux%EC%97%90%20%EB%8B%A8%ED%95%AD%20%EC%97%B0%EC%82%B0%EC%9E%90%EA%B0%80%20%ED%95%84%EC%9A%94%ED%95%A8%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
오류가 발생했습니다. [: -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++))