SW/리눅스

Linux : Bash while Loop 예제, 방법, 스크립트

얇은생각 2021. 3. 21. 07:30
반응형

루프는 프로그래밍 언어의 기본 개념 중 하나입니다. 특정 조건이 충족될 때까지 일련의 명령을 여러 번 실행하려는 경우 루프가 유용합니다.

Bash와 같은 스크립팅 언어에서는 반복 작업을 자동화하는 데 루프가 유용합니다. Bash 스크립팅에는 for, while, until까지 세 가지 기본 루프 구조가 있습니다.

이번 포스팅에서는 Bash의 루프 중 기본 사항에 대해 설명합니다. 또한 중단 및 계속 문을 사용하여 루프의 흐름을 변경하는 방법도 보여드리겠습니다.

 

 

Linux : Bash while Loop 예제, 방법, 스크립트

 

 

Bash While Loop

while roop은 주어진 조건이 true로 평가되는 한 알 수 없는 횟수만큼 명령 집합을 수행하는 데 사용됩니다. 

Bash while 루프는 다음과 같은 형태를 취합니다.

while [CONDITION]
do
  [COMMANDS]
done

 

 

 

while 문은 while 키워드로 시작하고 그 다음에 조건부 식이 나옵니다. 

이 조건은 명령을 실행하기 전에 평가됩니다. 조건이 true로 평가되면 명령이 실행됩니다. 그렇지 않으면 상태가 false로 평가되면 루프가 종료되고 프로그램 제어가 다음 명령으로 전달됩니다.

아래 예제에서 각 반복마다 변수의 현재 값 i가 인쇄되고 1씩 증가합니다.

i=0

while [ $i -le 2 ]
do
  echo Number: $i
  ((i++))
done

# Number: 0
# Number: 1
# Number: 2

 

 

tue 루프는 i가 2보다 작거나 같은 동안 반복됩니다. 다음과 같은 출력이 생성됩니다.

 

 

 

무한 While Loop

무한 반복은 무한 반복되고 종료되지 않는 루프입니다. 조건이 항상 true로 평가되면 무한 루프를 얻게 됩니다.

다음 예에서는 기본 제공 명령을 사용하여 무한 루프를 만듭니다. 항상 true를 반환합니다. 또한 항상 true를 반환하는 참 기본 제공 또는 다른 문을 사용할 수도 있습니다.

while :
do
  echo "Press <CTRL+C> to exit."
  sleep 1
done

 

 

위의 기간 루프는 무한정 실행됩니다. CTRL+C를 눌러 루프를 종료할 수 있습니다.

다음은 단일 라인 등가입니다.

while :; do echo 'Press <CTRL+C> to exit.'; sleep 1; done

 

 

 

라인별로 파일 읽기

파일, 데이터 스트림 또는 변수를 한 줄로 읽는 것이 가장 일반적인 사용 방법 중 하나입니다.

다음은 /etc/passwd 파일을 줄별로 읽고 각 줄을 인쇄하는 예입니다.

file=/etc/passwd

while read -r line; do
  echo $line
done < "$file"

 

 

조건으로 while 루프를 제어하는 대신, 우리는 입력 리디렉션(< "$file")을 사용하여 루프를 제어하는 읽기 명령에 파일을 전달하고 있습니다. 마지막 줄을 읽을 때까지 반복이 실행됩니다. 

줄별로 파일을 읽을 때는 항상 -r 옵션과 함께 읽기를 사용하여 백슬래시가 이스케이프 문자로 작동하지 않도록 합니다. 

기본적으로 읽기 명령은 선행/후행 공백 문자(스페이스 및 탭)를 자릅니다. 읽기 전에 IFS= 옵션을 사용하여 이 동작을 방지합니다.

file=/etc/passwd

while IFS= read -r line; do
  echo $line
done < "$file"

 

 

 

break, cotinue 문

중단 및 계속 문은 반복 실행을 제어하는 데 사용할 수 있습니다. 

중단문은 현재 루프를 종료하고 종료된 루프를 따르는 명령에 프로그램 제어를 전달합니다. 일반적으로 특정 조건이 충족될 때 루프를 종료하는 데 사용됩니다.

다음 예에서는 현재 반복 항목이 2와 동일하면 루프 실행이 중단됩니다.

i=0

while [ $i -lt 5 ]
do
  echo "Number: $i"
  ((i++))
  if [[ "$i" == '2' ]]; then
    break
  fi
done

echo 'All Done!'

# Number: 0
# Number: 1
# All Done!

 

 

계속 문은 루프의 현재 반복을 종료하고 프로그램 컨트롤을 루프의 다음 반복으로 전달합니다. 

아래에서는 현재 반복 항목이 2와 동일하면 계속 명령문은 실행을 루프 시작 부분으로 되돌리고 다음 반복을 계속하도록 합니다.

반응형