![여기서 내가 뭘 잘못하고 있는 걸까요? (루프 문제)](https://linux55.com/image/138254/%EC%97%AC%EA%B8%B0%EC%84%9C%20%EB%82%B4%EA%B0%80%20%EB%AD%98%20%EC%9E%98%EB%AA%BB%ED%95%98%EA%B3%A0%20%EC%9E%88%EB%8A%94%20%EA%B1%B8%EA%B9%8C%EC%9A%94%3F%20(%EB%A3%A8%ED%94%84%20%EB%AC%B8%EC%A0%9C).png)
이게 여기 있어요
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 이면 n
1부터 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
이것은아니요n
6에 도달하면 외부 루프가 중지되는 것과 동일한 문제가 발생했습니다 .
그러나 내부 루프의 출력을 외부 루프의 출력에 추가하려면 다음을 순차적으로 실행할 수도 있습니다.
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