쉘에서 배열 비교하기

ShellBeginner
지금 연습하기

소개

이 실습에서는 쉘 스크립트에서 배열을 비교하는 방법을 배웁니다. 배열은 여러 값을 저장하는 데 유용한 데이터 구조이며, 이를 비교하는 작업은 프로그래밍에서 매우 자주 발생합니다. 여러분은 세 개의 배열을 다루며 그 사이에서 공통된 요소를 찾아내는 스크립트를 개발하게 됩니다. 이 과정을 통해 쉘 스크립트의 배열 조작, 반복문, 그리고 조건문에 대한 이해도를 높일 수 있습니다.

이 실습은 단계별 안내를 제공하여 학습과 실습을 돕는 가이드형 실습입니다. 각 단계를 주의 깊게 따라가며 직접 경험을 쌓아보세요. 통계에 따르면 이 실습은 초급 수준이며, 98%의 높은 완료율을 기록하고 있습니다. 또한 학습자들로부터 100%의 긍정적인 평가를 받았습니다.

스크립트 파일 생성

먼저, 스크립트를 작성할 새로운 파일을 만들어 보겠습니다.

  1. WebIDE 에서 터미널을 엽니다. $ 기호로 끝나는 명령 프롬프트가 보일 것입니다.

  2. 프로젝트 디렉토리로 이동합니다:

cd ~/project

이 명령은 현재 작업 디렉토리를 프로젝트 폴더로 변경합니다. ~ 기호는 홈 디렉토리를 의미하며, /project는 그 안에 있는 하위 폴더입니다.

  1. array-comparison.sh라는 이름의 새 파일을 생성합니다:
touch array-comparison.sh

touch 명령은 빈 파일을 생성합니다. 만약 파일이 이미 존재한다면, 내용물은 수정하지 않고 파일의 타임스탬프만 업데이트합니다.

  1. WebIDE 에디터에서 해당 파일을 엽니다. WebIDE 인터페이스 왼쪽의 파일 탐색기에서 파일 이름을 클릭하면 됩니다.

셔뱅 추가 및 배열 초기화

이제 셔뱅 (shebang) 을 추가하고 배열을 초기화하여 스크립트 작성을 시작해 보겠습니다.

  1. 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 에서 배열은 요소를 괄호 ()로 감싸고 공백으로 구분하여 정의합니다.
  • 각 배열은 서로 다른 정수 값들을 담고 있습니다. 우리는 이 배열들을 비교하여 공통 요소를 찾아낼 것입니다.

첫 번째 비교 반복문 구현

배열 ab 사이의 공통 요소를 찾기 위한 첫 번째 비교 반복문을 구현해 보겠습니다.

스크립트에 다음 코드를 추가하세요:

## 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[@]}"ab의 공통 요소가 저장된 배열 z를 순회합니다.
  • c의 요소와 z의 요소를 비교하여 일치하는 경우 배열 j에 추가합니다.
  • 마지막으로 세 배열 모두에 존재하는 공통 요소를 출력합니다.

스크립트 실행 권한 부여 및 실행

스크립트 작성이 완료되었으므로, 실행 가능하도록 권한을 부여하고 실행해 보겠습니다.

  1. 터미널에서 스크립트에 실행 권한을 부여합니다:
chmod +x ~/project/array-comparison.sh

chmod 명령은 파일의 권한을 변경합니다. +x 옵션은 실행 권한을 추가하여 스크립트를 직접 실행할 수 있게 해줍니다.

  1. 스크립트를 실행합니다:
~/project/array-comparison.sh

이 명령은 작성한 스크립트를 실행합니다. ~/project/ 부분은 스크립트가 위치한 경로를 지정합니다.

다음과 같은 결과가 출력되어야 합니다:

Common elements between a and b: 5 6
Common elements among a, b, and c: 5

출력 결과의 의미는 다음과 같습니다:

  • 배열 ab의 공통 요소는 5 와 6 입니다.
  • 세 배열 (a, b, c) 모두에 공통으로 들어있는 요소는 5 입니다.

만약 결과가 다르게 나오거나 오류가 발생한다면, 스크립트에 오타가 없는지 또는 빠진 부분이 없는지 다시 한번 확인해 보세요.

요약

이 실습에서는 쉘 스크립트에서 배열을 비교하는 방법을 배웠습니다. 중첩 반복문과 조건문을 사용하여 세 개의 배열에서 공통 요소를 찾아내는 스크립트를 직접 작성해 보았습니다. 이 과정을 통해 다음과 같은 쉘 스크립트의 핵심 개념을 익혔습니다:

  1. 배열 생성 및 초기화
  2. 중첩 반복문을 이용한 배열 요소 비교
  3. 조건문을 활용한 값의 일치 여부 확인
  4. 배열에 요소를 동적으로 추가하는 방법
  5. 스크립트에 실행 권한을 부여하고 실행하는 방법

이러한 기술은 쉘 스크립트의 기초이며, 향후 더 복잡한 데이터 처리 작업을 수행할 때 유용하게 활용될 수 있습니다. 배열 조작은 데이터를 효율적으로 다루는 강력한 도구입니다.

개념을 완전히 익히기 위해 연습이 가장 중요합니다. 배열의 값을 바꾸어 보거나, 공통 요소 대신 서로 다른 요소 (차집합) 를 찾는 방식으로 스크립트를 수정해 보세요. 즐거운 스크립팅 되시기 바랍니다!