Unix / Linux - Shell Loop Control

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 Unix와 Linux 셸 스크립팅의 흥미로운 세계에서 루프 제어에 대해 배울 것입니다. 여러분의 친절한 이웃 컴퓨터 선생으로서, 저는 이 여정을 단계별로 안내해 드리겠습니다. 프로그래밍에 처음이시라도 걱정하지 마세요 - 기본부터 시작해 차근차근 진행하겠습니다. 그럼 커피 한 잔 (또는 차, 당신의 취향에 따라)을 마시며, 루프를 시작해 보세요!

Unix / Linux - Loop Control

루프 이해하기

루프 제어에 뛰어들기 전에, 잠시 루프가 무엇인지 간단히复習해 보겠습니다. 상상해 보세요. "I love programming"를 黑板에 100번 쓰는 임무가 주어졌을 때, 수동으로 100번씩 쓰는 대신 루프를 사용하여 이 반복적인 작업을 자동화할 수 있습니다. 프로그래밍에서 루프는 exactly 이와 같은 역할을 합니다 - 동일한 명령을 여러 번 실행할 필요 없이 반복적으로 명령을 실행할 수 있게 해줍니다.

무한 루프

이제 흥미롭지만 잠재적으로 위험한 무한 루프에 대해 이야기해 보겠습니다. 무한 루프는 멈추지 않는 회전木馬와 같습니다 - 계속해서 돌아갑니다.

무한 루프는 무엇인가요?

무한 루프는 종료 조건이 결코 충족되지 않기 때문에 무한히 계속运行的 루프입니다. 이것이 재앙의 공식처럼 들릴 수 있지만, 실제로 무한 루프가 유용한 상황들이 있습니다 (나중에 그 부분에 대해 이야기하겠습니다).

무한 루프의 예제

셸 스크립팅에서 무한 루프의 간단한 예제를 보여드리겠습니다:

#!/bin/bash
while true
do
echo "This is an infinite loop!"
sleep 1
done

이 스크립트에서:

  • while true는 항상 참인 조건을 만들어서 루프가 멈추지 않습니다.
  • echo는 우리의 메시지를 인쇄합니다.
  • sleep 1은 다음 반복 전에 스크립트를 1초 동안 멈추게 합니다.

이 스크립트를 실행하면 "This is an infinite loop!"가 매秒마다 인쇄되直到你手动停止脚本(일반적으로 Ctrl+C를 눌러서).

무한 루프를 언제 사용할까요?

믿을 수 없겠지만, 무한 루프는 항상 나쁜 것이 아닙니다! 다음과 같은 상황에서 유용할 수 있습니다:

  1. 지속적으로 실행해야 하는 프로그램을 만들 때 (예: 서버).
  2. 사용자가 반복적으로 선택할 수 있는 메뉴 시스템을 구현할 때.
  3. 특정 이벤트나 조건을 모니터링할 때.

기억하세요, 강력한 힘에는 큰 책임이 따릅니다. 필요할 때 무한 루프를 종료할 수 있는 방법을 항상 확보하세요!

break 문

이제 루프가 영원히 계속되는 것을 보았으니, 원하는 때에 그것을 멈추는 방법을 배워보겠습니다. break 문이 여기에 등장합니다 - 어떤 루프에서든 긴급히 나가는 문입니다.

break는 무엇을 하나요?

break 문은 현재 루프를 무시하고, 루프의 조건이 여전히 참이더라도 루프를 종료합니다.

break 사용 예제

이전의 무한 루프를 수정하여 5번 반복 후 멈추도록 만들어 보겠습니다:

#!/bin/bash
count=0
while true
do
echo "Loop iteration: $count"
count=$((count + 1))
if [ $count -eq 5 ]
then
echo "Breaking the loop!"
break
fi
sleep 1
done
echo "Loop has ended."

이 스크립트에서:

  • count 변수를 초기화하여 반복 횟수를 추적합니다.
  • 각 반복에서 count를 증가시키고 5와 비교합니다.
  • count가 5라면 메시지를 인쇄하고 break를 사용하여 루프를 종료합니다.

이 스크립트를 실행하면 5까지 카운트하고 멈춥니다.

continue 문

break는 루프를 완전히 종료시키지만, 때로는 현재 반복의 나머지 부분을 건너뛰고 다음 반복으로 이동하고 싶을 수 있습니다. 이때 continue 문이 유용합니다.

continue는 무엇을 하나요?

continue 문은 현재 루프 반복의 나머지 부분을 건너뛰고 다음 반복으로 이동합니다.

continue 사용 예제

다음 스크립트는 1에서 10까지의 숫자를 인쇄하지만 짝수를 건너뛰습니다:

#!/bin/bash
for i in {1..10}
do
if [ $((i % 2)) -eq 0 ]
then
continue
fi
echo $i
done

이 스크립트에서:

  • for 루프를 사용하여 1에서 10까지 반복합니다.
  • if [ $((i % 2)) -eq 0 ]는 숫자가 짝수인지 확인합니다.
  • 짝수라면 continue를 사용하여 다음 반복으로 이동합니다.
  • 그렇지 않으면 숫자를 인쇄합니다.

이 스크립트를 실행하면 오직 홀수만 인쇄됩니다: 1, 3, 5, 7, 9.

모든 것을 통합해 보자

이제 무한 루프, break, 그리고 continue를 배웠으니, 이 개념들을 모두 사용하는 더 복잡한 예제를 만들어 보겠습니다:

#!/bin/bash

echo "Welcome to the Number Guessing Game!"
secret_number=$((RANDOM % 10 + 1))
attempts=0

while true
do
read -p "Guess a number between 1 and 10 (or 'q' to quit): " guess

if [ "$guess" = "q" ]
then
echo "Thanks for playing! The secret number was $secret_number."
break
fi

if ! [[ "$guess" =~ ^[0-9]+$ ]]
then
echo "Please enter a valid number or 'q' to quit."
continue
fi

attempts=$((attempts + 1))

if [ "$guess" -eq "$secret_number" ]
then
echo "Congratulations! You guessed the number in $attempts attempts!"
break
elif [ "$guess" -lt "$secret_number" ]
then
echo "Too low! Try again."
else
echo "Too high! Try again."
fi
done

이 스크립트는 다음을 보여줍니다:

  • 무한 루프로 게임을 계속 실행합니다.
  • 사용자가 정답을 맞추거나 나가기를 선택할 때 break를 사용하여 루프를 종료합니다.
  • 무效한 입력을 건너뛰기 위해 continue를 사용합니다.

루프 제어 문 요약

여기서 배운 루프 제어 문의 빠른 참고 표를 제공합니다:

설명 사용 사례
while true 무한 루프를 만듭니다 루프가 지속적으로 실행해야 할 때
break 현재 루프를 종료합니다 특정 조건이 충족되었을 때 루프를 멈추고 싶을 때
continue 현재 반복의 나머지 부분을 건너뛰고 다음 반복으로 이동합니다 특정 조건이 충족되지 않았을 때 현재 반복을 건너뛰고 싶을 때

기억하세요, 루프는 프로그래밍에서 강력한 도구이지만, 강력한 힘에는 큰 책임이 따릅니다. 항상 루프를 종료할 수 있는 방법을 확보하고, breakcontinue를 신중하게 사용하여 효율적이고 효과적인 스크립트를 만들어 보세요.

미래의 셸 스크립팅 마법사 여러분, 행복한 코딩을! 여러분의 루프는 필요할 때만 무한히 계속되고, break 문이 항상 필요할 때 있기를 바랍니다. 다음 번에 다시 만나겠습니다. 계속해서 루프를 돌리고 배우세요!

Credits: Image by storyset