리눅스

쉘 프로그래밍 [배열]

작성자
heukchoo
작성일
2021-01-18 00:04
조회
1674
배열은 다수의 변수 시리즈를 저장한다.

예로 '월, 화, 수, 목, 금, 토, 일' 과 같이 유사한 값들을 각각 변수에 저장할때, mon=월, tue=화 .. 이런식으로 변수를 지정하는 것은 비효율 적이다.

week 라는 배열에 쭉 저장하고, week 배열의 첫번째는 월, 두번째는 화 등으로 참조하는 것이 효율적일 것이다.


쉘 프로그래밍에서 배열은 그리 많이 사용되진 않는다.
그정도로 고난도의 복잡한 프로그래밍을 할 일이 없기 때문에..

그래도 기능이 있기 때문에 참고로 설명한다.


배열 선언 및 초기화(값 입력)


배열의 선언과 초기화 방법은 변수와 비슷하다.
$array=(1 2 3 4 5)

$array[0]=6

$array[1]=7


첫번째는 공백으로 값을 구분하여 5개의 값을 한번에 입력하였다.

두번째는 처음 저장소(0부터 시작)에 6을 입력했다.

기존에 1을 입력했기 때문에 1은 6으로 변경된다.

마찬가지로 세번째는 두번째 저장소(1번)에 7을 입력하여 기존 2가 7로 변경된다.


배열의 참조


$array=(1 2 3 4 5)


$echo ${array[0]}
1

$echo ${array[4]}
5

$echo ${array[*]}
1 2 3 4 5

$echo ${#array[*]}
5

대괄호 안에는 저장소의 위치를 표기한다.(0부터 시작)

대괄호에 *을 사용하면 모든 저장소를 의미한다.

배열명 앞에 #을 붙이면 저장소의 개수를 의미한다.


루프문에서 배열 활용 예시


array1.p 스크립트

#!/bin/bash
array=(1 2 3)

for i in ${array[*]}
do

echo $i

done


$./array1.p
1
2
3

배열의 값들을 순차적으로 루프변수 i에 전달했다.


array2.p 스크립트

#!/bin/bash
array=(1 2 3)

for i in `seq 0 2`
do

echo ${array[$i]}

done


$./array2.p
1
2
3


루프변수 i를 통해 저장소 위치를 순차적으로 바꿔가며 배열값을 출력하였다.


2차원 배열


array3.p 스크립트

#!/bin/bash

#2차원 배열 초기화

for i in `seq 0 1`
do

for j in `seq 0 2`
do

array[$i,$j]=$RANDOM

done

done


#2차원 배열 출력

for i in `seq 0 1`
do

for j in `seq 0 2`
do

echo -n ${array[$i,$j]}

echo -n " "

if [ $i -eq 1 ]
then

echo ""

fi

done

done


$./array3.p
3242 1221 2342
2234 2353 6432

루프문을 이중으로 사용하여 2차원 배열을 초기화 하였다.

루프변수 i는 행을 j는 열을 의미한다.

배열의 입력 값은 $RANDOM을 사용하여 임의의 난수로 생성하였다.

출력은 2차원 배열값을 잘 보여주기 위해 3열 2행으로 출력하였다.
(별다른 조치를 하지 않으면 1열로 쭉 출력된다.)

echo 문에 사용한 -n 옵션은 문자 출력 후 자동 개행하지 않도록 한다.

if 문은 행을 나타내는 루프변수 i가 1이 됐을때(행이 바뀔때) echo "" 명령을 실행하도록 한다.

echo "" 명령은 개행을 위해 사용하였다.
전체 0