소개
이 실습에서는 쉘 스크립트에서 배열을 비교하는 방법을 배웁니다. 배열은 여러 값을 저장하는 데 유용한 데이터 구조이며, 이를 비교하는 작업은 프로그래밍에서 매우 자주 발생합니다. 여러분은 세 개의 배열을 다루며 그 사이에서 공통된 요소를 찾아내는 스크립트를 개발하게 됩니다. 이 과정을 통해 쉘 스크립트의 배열 조작, 반복문, 그리고 조건문에 대한 이해도를 높일 수 있습니다.
이 실습에서는 쉘 스크립트에서 배열을 비교하는 방법을 배웁니다. 배열은 여러 값을 저장하는 데 유용한 데이터 구조이며, 이를 비교하는 작업은 프로그래밍에서 매우 자주 발생합니다. 여러분은 세 개의 배열을 다루며 그 사이에서 공통된 요소를 찾아내는 스크립트를 개발하게 됩니다. 이 과정을 통해 쉘 스크립트의 배열 조작, 반복문, 그리고 조건문에 대한 이해도를 높일 수 있습니다.
먼저, 스크립트를 작성할 새로운 파일을 만들어 보겠습니다.
WebIDE 에서 터미널을 엽니다. $ 기호로 끝나는 명령 프롬프트가 보일 것입니다.
프로젝트 디렉토리로 이동합니다:
cd ~/project
이 명령은 현재 작업 디렉토리를 프로젝트 폴더로 변경합니다. ~ 기호는 홈 디렉토리를 의미하며, /project는 그 안에 있는 하위 폴더입니다.
array-comparison.sh라는 이름의 새 파일을 생성합니다:touch array-comparison.sh
touch 명령은 빈 파일을 생성합니다. 만약 파일이 이미 존재한다면, 내용물은 수정하지 않고 파일의 타임스탬프만 업데이트합니다.
이제 셔뱅 (shebang) 을 추가하고 배열을 초기화하여 스크립트 작성을 시작해 보겠습니다.
array-comparison.sh 파일에 다음 내용을 추가합니다:#!/bin/bash
## Initialize the arrays
a=(3 5 8 10 6)
b=(6 5 4 12)
c=(14 7 5 7)
코드의 의미는 다음과 같습니다:
#!/bin/bash는 셔뱅이라고 불립니다. 시스템에 이 스크립트를 실행할 때 Bash 인터프리터를 사용하도록 지시합니다. 쉘 스크립트에서 매우 중요한 부분입니다.a, b, c라는 세 개의 배열을 초기화합니다. Bash 에서 배열은 요소를 괄호 ()로 감싸고 공백으로 구분하여 정의합니다.배열 a와 b 사이의 공통 요소를 찾기 위한 첫 번째 비교 반복문을 구현해 보겠습니다.
스크립트에 다음 코드를 추가하세요:
## Initialize an array to store common elements between a and b
z=()
## Compare arrays a and b
for x in "${a[@]}"; do
for y in "${b[@]}"; do
if [ $x = $y ]; then
z+=($x)
fi
done
done
echo "Common elements between a and b: ${z[@]}"
코드의 상세 설명은 다음과 같습니다:
z=()는 공통 요소를 저장할 빈 배열 z를 초기화합니다.for x in "${a[@]}"는 배열 a의 각 요소를 순회하는 반복문입니다. "${a[@]}" 구문은 배열의 모든 요소로 확장됩니다.for y in "${b[@]}"를 사용하여 배열 b의 각 요소를 순회합니다.if [ $x = $y ]는 배열 a에서 가져온 현재 요소와 배열 b에서 가져온 현재 요소가 같은지 확인합니다.z+=($x)를 사용하여 해당 요소를 배열 z에 추가합니다.echo "Common elements between a and b: ${z[@]}"를 통해 공통 요소를 출력합니다. ${z[@]} 구문은 배열 z의 모든 요소를 나타냅니다.이제 배열 c와 이전에 찾은 공통 요소들이 담긴 배열 z를 비교하여, 세 배열 모두에 포함된 공통 요소를 찾는 두 번째 반복문을 구현합니다.
스크립트에 다음 코드를 추가하세요:
## Initialize an array to store common elements among a, b, and c
j=()
## Compare array c with the common elements found in z
for i in "${c[@]}"; do
for k in "${z[@]}"; do
if [ $i = $k ]; then
j+=($i)
fi
done
done
echo "Common elements among a, b, and c: ${j[@]}"
이 코드는 이전 단계의 반복문과 유사하지만 몇 가지 차이점이 있습니다:
j를 초기화합니다.for i in "${c[@]}"는 배열 c의 요소를 순회합니다.for k in "${z[@]}"는 a와 b의 공통 요소가 저장된 배열 z를 순회합니다.c의 요소와 z의 요소를 비교하여 일치하는 경우 배열 j에 추가합니다.스크립트 작성이 완료되었으므로, 실행 가능하도록 권한을 부여하고 실행해 보겠습니다.
chmod +x ~/project/array-comparison.sh
chmod 명령은 파일의 권한을 변경합니다. +x 옵션은 실행 권한을 추가하여 스크립트를 직접 실행할 수 있게 해줍니다.
~/project/array-comparison.sh
이 명령은 작성한 스크립트를 실행합니다. ~/project/ 부분은 스크립트가 위치한 경로를 지정합니다.
다음과 같은 결과가 출력되어야 합니다:
Common elements between a and b: 5 6
Common elements among a, b, and c: 5
출력 결과의 의미는 다음과 같습니다:
a와 b의 공통 요소는 5 와 6 입니다.a, b, c) 모두에 공통으로 들어있는 요소는 5 입니다.만약 결과가 다르게 나오거나 오류가 발생한다면, 스크립트에 오타가 없는지 또는 빠진 부분이 없는지 다시 한번 확인해 보세요.
이 실습에서는 쉘 스크립트에서 배열을 비교하는 방법을 배웠습니다. 중첩 반복문과 조건문을 사용하여 세 개의 배열에서 공통 요소를 찾아내는 스크립트를 직접 작성해 보았습니다. 이 과정을 통해 다음과 같은 쉘 스크립트의 핵심 개념을 익혔습니다:
이러한 기술은 쉘 스크립트의 기초이며, 향후 더 복잡한 데이터 처리 작업을 수행할 때 유용하게 활용될 수 있습니다. 배열 조작은 데이터를 효율적으로 다루는 강력한 도구입니다.
개념을 완전히 익히기 위해 연습이 가장 중요합니다. 배열의 값을 바꾸어 보거나, 공통 요소 대신 서로 다른 요소 (차집합) 를 찾는 방식으로 스크립트를 수정해 보세요. 즐거운 스크립팅 되시기 바랍니다!