루프 bash 동안 중단할 수 없습니다.

루프 bash 동안 중단할 수 없습니다.

커뮤니티 여러분, 이 예제에서 while 루프를 중단할 수 없는 문제가 있습니다. 스크립트는 폴더에 있는 파일 수를 출력하고 개수가 0에 도달하면 다른 단계를 수행해야 합니다. 그러나 스크립트를 실행하고 폴더에서 파일을 삭제하면 루프가 조건을 충족하지 못하고 계속 작동합니다. Mb, bash 스크립팅을 처음 접할 때 내가 뭘 잘못하고 있는 걸까요? 제안해 주셔서 감사합니다.

var=$(ls some_folder/ | wc -l )
echo "$var"

while [ $var != 0 ];
do
    sleep 2
    echo "$test"
done

echo "finish!"

답변1

무한 루프를 작성했습니다. 귀하의 케이스에 ls0개 이상의 출력 라인이 있다고 가정하면 실제로는 다음과 같습니다.

var=1
while [ $var != 0 ]; do
    sleep 2
    echo "$test"
done

루프 중에는 값이 var수정되지 않으므로 루프 본문을 0번 실행하거나 스크립트가 외부에서 종료될 때까지 실행됩니다.

또한 숫자 비교를 수행하기 위해 문자열 비교를 사용하고 있다는 점도 지적해야 합니다. 수치 비교 -ne대신에 사용해야 합니다 .!=

관련 정보