여기서 내가 뭘 잘못하고 있는 걸까요? (루프 문제)

여기서 내가 뭘 잘못하고 있는 걸까요? (루프 문제)

이게 여기 있어요

n=0
x=1
while [ $n -lt 6 ]
do
         n=$(( n+1 ))
         echo "sasadgsad gsda $n" >> /home/test/rptest

if [ $n -eq 5 ]
   then
      while [ $x -le 5 ]
      do
         echo "end of line$x" >> /home/test/rptest
         x=$(( x+1 ))
      done
 fi
done

이걸 출력해

sasadgsad gsda 1
sasadgsad gsda 2
sasadgsad gsda 3
sasadgsad gsda 4
sasadgsad gsda 5
end of line1
end of line2
end of line3
end of line4
end of line5
sasadgsad gsda 6

11번째 줄은 없어야 합니다... n = 5일 때 첫 번째 while이 끝나야 하지 않나요? 왜 마지막 행을 생성합니까?

당신의 도움을 주셔서 감사합니다:)

나는 n=1을 사용해 보았고 while [ $n -le 5 ]

답변1

스크립트에 올바른 들여쓰기가 있습니다.

n=0
x=1
while [ $n -lt 6 ]; do
    n=$(( n+1 ))
    echo "sasadgsad gsda $n" >> /home/test/rptest

    if [ $n -eq 5 ]; then
        while [ $x -le 5 ]; do
            echo "end of line$x" >> /home/test/rptest
            x=$(( x+1 ))
        done
    fi
done

외부 루프는 0부터 5까지 6번 실행됩니다. n외부 루프의 시작 부분에서 업데이트하므로 루프 n본문의 값은 1에서 6으로 변경됩니다. 5 이면 n1부터 5까지 또 다른 루프를 실행하여 출력합니다 end of line.... 완료한 후에도 외부 루프를 한 번 반복해야 합니다.

스크립트를 작성하는 또 다른 방법은 다음과 같습니다 bash.

for (( n=1; n<=5; ++n )); do
    printf 'sasadgsad gsda %s\n' "$n"

    if (( n == 5 )); then
        for (( x=1; x<=5; ++x )); do
            printf 'end of line%s\n' "$x"
        done
    fi
done >>/home/test/rptest

이것은아니요n6에 도달하면 외부 루프가 중지되는 것과 동일한 문제가 발생했습니다 .

그러나 내부 루프의 출력을 외부 루프의 출력에 추가하려면 다음을 순차적으로 실행할 수도 있습니다.

for (( n=1; n<=5; ++n )); do
    printf 'sasadgsad gsda %s\n' "$n"
done >>/home/test/rptest

for (( n=1; n<=5; ++x )); do
    printf 'end of line%s\n' "$n"
done >>/home/test/rptest

또는 이 간단한 예를 들어

printf 'sasadgsad gsda %s\n' {1..5} >>/home/test/rptest
printf 'end of line%s\n' {1..5} >>/home/test/rptest

관련 정보