SW/리눅스

Linux : Bash를 사용한 반복문 : 예제, 코드, 방법

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

루프는 프로그래밍 언어의 기본 개념 중 하나입니다. 루프는 특정 조건에 도달할 때까지 일련의 명령을 반복해서 실행할 때 유용합니다.

Bash와 같은 스크립팅 언어에서는 반복 작업을 자동화하는 데 루프가 유용합니다.

Bash 스크립팅에는 루프, 루프 도중 및 루프까지 세 가지 기본 루프 구조가 있습니다.

이 튜토리얼에서는 Bash의 루프에 대한 기본 사항에 대해 설명합니다. 우리는 또한 루프의 흐름을 변경하기 위해 중단 및 계속 문을 사용하는 방법을 보여 드릴 것입니다.

 

 

Linux : Bash를 사용한 반복문 : 예제, 코드, 방법

 

 

루프를 위한 표준 배시

for 루프는 항목 목록에 대해 반복되며 지정된 명령 집합을 수행합니다.

Bash for 루프 양식은 다음과 같습니다.

for item in [LIST]
do
  [COMMANDS]
done

 

 

목록은 공백, 숫자 범위, 명령 출력, 배열 등으로 구분된 일련의 문자열일 수 있습니다.

 

 

 

문자열 루프

아래 예에서 루프는 문자열 목록의 각 항목에 대해 반복되며 변수 요소는 현재 항목으로 설정됩니다.

루프는 다음과 같은 출력을 생성합니다.

for element in Hydrogen Helium Lithium Beryllium
do
  echo "Element: $element"
done
Copy
The loop will produce the following output:

# Element: Hydrogen
# Element: Helium
# Element: Lithium
# Element: Beryllium

 

 

 

숫자 범위 루프

시퀀스 식을 사용하여 범위의 시작점과 끝점을 정의하여 숫자 또는 문자 범위를 지정할 수 있습니다. 시퀀스 식은 다음 형식을 사용합니다.

다음은 0부터 3까지 모든 숫자를 반복하는 예제 루프입니다.

for i in {0..3}
do
  echo "Number: $i"
done

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

 

 

Bash 4부터는 범위를 사용할 때 증분을 지정할 수도 있습니다. 식은 다음 형식을 사용합니다.

다음은 5만큼 증가하는 방법을 보여 주는 예입니다.

for i in {0..20..5}
do
  echo "Number: $i"
done

# Number: 0
# Number: 5
# Number: 10
# Number: 15
# Number: 20

 

 

 

배열 요소 반복

또한 for 루프를 사용하여 요소 배열에 대해 반복할 수 있습니다.

아래 예제에서는 BOOKS라는 이름의 배열을 정의하고 배열의 각 요소에 대해 반복하고 있습니다.

BOOKS=('In Search of Lost Time' 'Don Quixote' 'Ulysses' 'The Great Gatsby')

for book in "${BOOKS[@]}"; do
  echo "Book: $book"
done

# Book: In Search of Lost Time
# Book: Don Quixote
# Book: Ulysses
# Book: The Great Gatsby

 

 

 

C-style Bash for 루프

루프에 대한 C-스타일 구문은 다음과 같은 형식을 취하고 있습니다.

for ((INITIALIZATION; TEST; STEP))
do
  [COMMANDS]
done

 

 

Initialization 부분은 루프가 시작될 때 한 번만 실행됩니다. 그런 다음 테스트 부품을 평가합니다. 거짓이면 루프가 종료됩니다. TEST가 참이면 for 루프 본문 내부의 명령이 실행되고 STEP 부분이 업데이트됩니다.

다음 예제 코드에서 루프는 i = 0을 초기화하여 표시되며, 각 반복이 i § 10을 확인하기 전에 표시됩니다. True이면 i의 현재 값이 인쇄되고 [variable] i가 1(i++) 증가하지 않으면 루프가 종료됩니다.

for ((i = 0 ; i <= 1000 ; i++)); do
  echo "Counter: $i"
done

# Counter: 0
# Counter: 1
# Counter: 2
# ...
# Counter: 998
# Counter: 999
# Counter: 1000

 

 

 

break 구문

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

다음 예에서는 현재 반복 항목이 '리튬'과 동일하면 if 문을 사용하여 루프 실행을 종료하고 있습니다.

for element in Hydrogen Helium Lithium Beryllium; do
  if [[ "$element" == 'Lithium' ]]; then
    break
  fi
  echo "Element: $element"
done

echo 'All Done!'

# Element: Hydrogen
# Element: Helium
# All Done!

 

 

 

continue 구문

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

다음 예제에서는 다양한 범위의 숫자를 반복하고 있습니다. 현재 반복 항목이 '2'와 동일할 경우 계속 명령문은 실행을 루프 시작 부분으로 되돌리고 다음 반복을 계속합니다.

for i in {1..5}; do
  if [[ "$i" == '2' ]]; then
    continue
  fi
  echo "Number: $i"
done

# Number: 1
# Number: 3
# Number: 4
# Number: 5

 

 

 

반복 예제용 Bash

파일 이름에 공백이 있는 파일의 이름을 바꿉니다.

다음 예에서는 밑줄 공간을 교체하여 현재 디렉토리에 있는 모든 파일의 이름을 이름에 공백으로 바꾸는 방법을 보여 줍니다.

for file in *\ *; do
  mv "$file" "${file// /_}"
done

 

 

코드 라인을 한 줄씩 세분화해 보겠습니다.

첫 번째 줄은 for 루프를 만들고 이름에 공백이 있는 모든 파일 목록을 반복합니다. *\ * 식이 목록을 만듭니다.

두 번째 줄은 목록의 각 항목에 적용되고 파일을 새 줄로 이동하여 밑줄(_)로 공간을 대체합니다.

${file///_} 부분은 셸 매개 변수 확장을 사용하여 매개 변수 내의 패턴을 문자열로 바꾸고 있습니다.

done은 루프 세그먼트의 끝을 나타냅니다.

 

 

 

파일 확장명 변경

다음 예에서는 파일 확장자를 .jpeg에서 .jpg로 변경하여 현재 디렉토리에서 .jpeg로 끝나는 모든 파일의 이름을 변경하는 방법을 보여 줍니다.

for file in *.jpeg; do
    mv -- "$file" "${file%.jpeg}.jpg"
done

 

 

코드 라인을 라인별로 분석하겠습니다.

첫 번째 줄은 for 루프를 생성하고 '.jpeg'로 끝나는 모든 파일의 목록을 반복합니다.

두 번째 줄은 목록의 각 항목에 적용되고 파일을 새 줄로 이동하여 '.jpeg'를 '.jpg'로 바꿉니다. ${file%.jpeg} - 셸 매개 변수 확장을 사용하여 파일 이름에서 '.jpeg' 부분을 제거합니다.

done은 루프 세그먼트의 끝을 나타냅니다.

반응형