Bash Shell Script - 배열 할당, 길이, 객체 포함 여부 확인

By JS | Last updated: October 03, 2021

Linux의 Bash 쉘 스크립트에서 배열(Array)을 선언하고 값을 할당 및 접근하는 방법을 알아보겠습니다.

또한, 배열의 길이를 확인하거나 어떤 객체가 배열 내에 존재하는지 포함여부를 확인하는 방법을 소개합니다.

1. 배열 선언 및 할당

배열은 다음과 같이 선언 및 할당할 수 있습니다. Index 별로 객체를 할당합니다.

#!/bin/bash

FRUITS[0]="Apple"
FRUITS[1]="Banana"
FRUITS[2]="Kiwi"
FRUITS[3]="Grape"

Bash에서는 아래와 같은 형태로도 배열을 정의할 수 있습니다.

#!/bin/bash

FRUITS=("Apple", "Banana", "Kiwi", "Grape")

2. 배열 접근 방법

배열에 접근할 때는 ${ARRAY_NAME[Index]}로 접근합니다.

다음은 각각의 요소들을 출력하는 예제입니다.

#!/bin/bash

FRUITS[0]="Apple"
FRUITS[1]="Banana"
FRUITS[2]="Kiwi"
FRUITS[3]="Grape"

echo "First Index: ${FRUITS[0]}"
echo "Second Index: ${FRUITS[1]}"
echo "Third Index: ${FRUITS[2]}"
echo "Fourth Index: ${FRUITS[3]}"

Output:

$ bash example.sh
First Index: Apple
Second Index: Banana
Third Index: Kiwi
Fourth Index: Grape

2.1 배열의 모든 요소 접근

배열의 모든 요소를 얻으러면 ${ARRAY_NAME[*]} 또는 ${ARRAY_NAME[@]}처럼, Index 위치에 * 또는 @를 입력하시면 됩니다.

다음 예제와 같이, ${ARRAY_NAME[* or #]}는 배열의 모든 요소를 리턴합니다.

#!/bin/bash

FRUITS[0]="Apple"
FRUITS[1]="Banana"
FRUITS[2]="Kiwi"
FRUITS[3]="Grape"

echo "All Items: ${FRUITS[*]}"
echo "All Items: ${FRUITS[@]}"

Output:

$ bash example.sh
All Items: Apple Banana Kiwi Grape
All Items: Apple Banana Kiwi Grape

2.2 반복문으로 배열의 요소 접근

반복문으로 배열의 모든 요소를 순회하면서 어떤 작업을 수행할 수 있습니다.

아래 예제는 반복문으로 배열의 모든 요소를 더하고, 총합을 출력합니다.

#!/bin/bash

arr=(10 20 30 40 50)

sum=0

for i in ${arr[@]}
do
    sum=`expr $sum + $i`
done

echo $sum

Output:

$ bash example.sh
150

3. 배열 길이

배열 길이는 ${#ARRAY_NAME[*]}" 또는 ${#ARRAY_NAME[@]}"처럼, 배열의 모든 요소를 의미하는 ARRAY_NAME[@] 앞에 #을 입력하시면 됩니다.

다음은 배열 길이를 출력하는 예제입니다.

#!/bin/bash

FRUITS[0]="Apple"
FRUITS[1]="Banana"
FRUITS[2]="Kiwi"
FRUITS[3]="Grape"

echo "Array length: ${#FRUITS[*]}"
echo "Array length: ${#FRUITS[@]}"

Output:

Array length: 4
Array length: 4

4. 배열에 특정 요소가 존재하는지 확인

For 루프를 이용하여 배열의 모든 요소를 순회하면서 특정 요소가 존재하는지 If문으로 확인할 수 있습니다.

다음 예제는 반복문과 조건문으로 특정 요소가 배열에 존재하는지 확인하는 코드입니다. 포함 여부를 판단하는 코드들을 in_array라는 함수로 정의하였습니다. 찾으려는 요소와 모든 배열 요소들을 함수의 인자로 전달받습니다.

#!/bin/bash

function in_array {
    ARRAY=$2
    for e in ${ARRAY[*]}
    do
        if [[ "$e" == "$1" ]]
        then
            return 0
        fi
    done

    return 1
}


FRUITS[0]="Apple"
FRUITS[1]="Banana"
FRUITS[2]="Kiwi"
FRUITS[3]="Grape"

# Check if it contains 'Orange'
if in_array "Orange" "${FRUITS[*]}"
then
    echo "Found: Orange"
else
    echo "Not found: Orange"
fi

# Check if it contains 'Kiwi'
if in_array "Kiwi" "${FRUITS[*]}"
then
    echo "Found: Kiwi"
else
    echo "Not found: Kiwi"
fi

Output:

$ bash example.sh
Not found: Orange
Found: Kiwi

References

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha