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

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

저는 쉘 스크립팅을 처음 접했고 우분투 쉘 스크립트에서 while 루프를 배우려고 합니다. 스크립트.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가 발생합니다
    • 명령 대체의 stdout이 변수에 할당됩니다 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

관련 정보