[Bash] 쉘 스크립트 정리 2

김동완 (Joseph Kim)·2023년 6월 8일
0

shell

목록 보기
2/2
post-thumbnail

1. for문

#!/bin/bash
 
for 변수 in 범위 (list, arrray 등)
do
  반복할 명령문
done

반복문의 기본 구조는 위와 같습니다. in 뒤에 범위에는 리스트나 배열 등이 올 수 있습니다.

반복할 명령문은 do 와 done 사이에 위치해 있습니다.


1.1 list

for_list.sh

#!/bin/bash

LIST="1 2 3 4 5"
for var in ${LIST}
do
  echo var = $var
done

list를 출력하는 for문 입니다.

list를 생성할 때 공백으로 값을 구분해줘야합니다. ,를 사용하면 하나의 값으로 인식합니다.


1.2 Array (배열)

for_array.sh

#!/bin/bash

Array=(1 2 3 4 5)
for var in "${Array[@]}"
do
  echo var = $var
done

배열을 출력하는 for문의 예시입니다.

번외로 배열을 출력할 때 Array[@]로 index를 하나로 지정하면 해당 index에 매칭되는 값이 출력되고 Array[*]로 지정하면 배열 전체를 출력합니다.


1.3 점차 증가하는 케이스

for_increase.sh

#!/bin/bash

# case1
for var in {1..10}
do
  echo var = $var
done

# case2
for var2 in {1..10..2}
do
  echo var2 = $var2
done

case1의 경우

다음과 같이 출력 됩니다.

{시작값..끝값}
형식으로 작성여 시작값부터 1씩 증가하여 끝값까지 점차 증가하는 케이스입니다.

case2의 경우

다음과 같이 출력 됩니다.

{시작값..끝값..증가분}
형식으로 작성여 시작값부터 증가분만큼 증가하여 끝값까지 점차 증가하는 케이스입니다.


1.4 이중괄호 (( ))

multi_for.sh

#!/bin/bash

for ((i=0; i<10; i++)); do
  echo $i
done

이중 괄호를 사용하여 다음과 같이 산술연산이 가능합니다.

실행시 다음과 같은 결과를 얻을 수 있습니다.


1.5 break, continue

break_for.sh

for i in {1..10}
do
  echo $i
  if [ $i == 7 ]; then
    echo find 7!
    break
  fi
done

if문과 break를 활용하여 특정 조건을 만족하면 for문(반복문)을 빠져나올 수 있습니다.

이를 조금 더 응용해서 continue와 break을 같이 사용해보겠습니다.

continue_for.sh

#!/bin/bash

j=0
for i in {1..10}
do
  j=`expr $j + $i`
  echo i is $i
  echo sum of i is $j
  echo "============="
  if [ "$j" -le 30 ]; then
    continue
    echo test continue 1
  else
    echo sum of i is larger then 30!
    break
  fi
  echo test break 1
done

숫자 1부터 10까지 순차적으로 더하여 합이 30이 넘어가면 문구가 출력되며 반복문이 종료되는 코드입니다.

코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

코드를 조금 더 살펴보겠습니다.

j=`expr $j + $i`

이 부분을 보면 변수 i와 j 모두 숫자이지만 bash에서는 string으로 취급하기 때문에 두 숫자의 합을 표현할때 위와 같이 표현해야 정상적으로 계산된 값이 출력됩니다.

  if [ "$j" -le 30 ]; then
    continue
    echo test continue 1
  else
    echo sum of i is larger then 30!
    break
  fi
  echo test break 1

if문을 보면 $j가 30보다 작으면 continue에서 아래로 내려가지 않고 다시 올라가 반복문을 다시 실행합니다. 따라서 test continue 1이 출력되지 않는것을 확인할 수 있습니다.

$j가 30보다 커지면 else문으로 넘어가 문구가 출력되고 break을 통해 반복문이 종료되기 때문에 뒤에 있는 test break 1도 출력되지 않고 끝나는것을 확인할 수 있습니다.

profile
Kubernetes / DevOps / Git / Network / AWS / Terraform / Opensource / Java / Springboot

0개의 댓글