우분투 쉘 스크립트에서 while 루프를 사용할 때 오류가 발생했습니다.

우분투 쉘 스크립트에서 while 루프를 사용할 때 오류가 발생했습니다.

저는 쉘 스크립팅을 처음 접했고 우분투 쉘 스크립트에서 while 루프를 배우려고 합니다. script.sh

#!/bin/bash
#Initializing two variables
#while loop

echo while loop
a=0
while [ $a -lt 10 ]
do 
echo $a
a=$(a + 1) 
done

출력은 -

vscoder@vscoder-VirtualBox:~$ ./script.sh
while loop
0
./script.sh: line 10: a: command not found
./script.sh: line 7: [: -lt: unary operator expected
vscoder@vscoder-VirtualBox:~$ 

오류가 무엇인지 모르겠습니다. 누군가 이 문제를 해결하도록 도와주세요.

답변1

현재 상황은 다음과 같습니다.

  • while 루프를 처음으로 통과했으므로 a == 0사실 [ $a -lt 10 ]입니다 .
  • 루프에 들어가서 실행합니다.a=$(a + 1)
  • 왜냐하면 이것은명령 대체아니요산술 확장, 껍데기
    • a매개변수를 사용하여 프로그램을 실행해 보세요 +.1
    • a: command not found오류 발생
    • 명령 대체의 표준 출력은 변수에 할당됩니다 a. 이는 빈 문자열입니다.
  • 루프백하여 조건을 다시 테스트합니다.
    • $a빈 문자열이고 not 을 사용했으며 [따옴표가 없기 때문에 [[$a은 다음을 확인합니다.[ -lt 10 ]
    • -lt단항 연산자가 아닙니다(참조test명령그리고Bash 조건식) 오류 메시지가 표시됩니다.
    • [0이 아닌 상태로 종료하여 while루프를 중지합니다.

답변2

비교하려면 변수를 변경하고 할당해야 합니다.

#!/bin/bash
echo while loop
a=0
while [[ $a -lt 10 ]]
do
echo $a
a=$(($a+1))
done

관련 정보