일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Update
- PC
- UNIX
- Disk Partition
- H/W
- calculator
- script
- MS windows
- program
- javascript
- FTP
- explorer
- apm
- LiveCD(USB)
- MS Windows PE
- portable
- Windows 10
- Backup(Restore)
- SSH
- Linux
- 대항해시대
- OS(operating system)
- webhard
- web
- Network Info(Tool)
- game
- Command
- network
- Crack(Serial Key)
- Programming
- Today
- Total
<In Story>
Shell Script 기본 - 2.기본 문법 (3) 배열 // [Unix] [Linux] [Script] [Programming] 본문
Shell Script 기본 - 2.기본 문법 (3) 배열 // [Unix] [Linux] [Script] [Programming]
<In Story, Hi story, History> 2015. 5. 25. 13:00http://ktdsoss.tistory.com/125
(3) 배열
배열을 선언하여 값을 할당하는 방법에는 크게 두 가지 정도가 있습니다.
하나는 배열의 인덱스 하나하나를 구분하여 각각의 인덱스에 일일이 값을 지정하는 방법과, 또 다른 하나는 뭉탱이로 배열에 값을 넣어주는 방법입니다.
먼저 인덱스 하나하나에 값을 따로따로 지정하는 방법은 다음과 같습니다.
array[1]='Script'
array[2]='Programming'
위 예제의 경우, 인덱스 '0'에는 'Shell'이란 문자열이, 인덱스 '1'에는 'Script'란 문자열이, 인덱스 '2'에는 'Programming'이란 문자열이 각각 지정되었습니다.
위와 같이 지정한 후, 다른 라인에서 해당 배열 변수값을 호출하고자 할 때는 아래와 같이 사용하면 됩니다.
echo ${array[1]}
버퍼에 있는 변수값을 호출하려 할 때, '$'를 붙여서 사용하면 된다는 것은 앞의 글에서 이미 설명 드렸었습니다.
헌데, 위 예시에는 그동안 사용하지 않았던 '{ }'(중괄호)가 들어가 있죠?
왜일까요?
다음과 같은 아주 간단한 스크립트가 있습니다.
#!/bin/sh
array[0]='Shell'
array[1]='Script'
echo $array[0] $array[1]
echo ${array[0]} ${array[1]}
위 스크립트를 실행시키면 첫 번째 echo 문의 결과값은 'Shell[0] Shell[1]' 이라고 출력되고, 두 번째 echo 문의 결과값은 'Shell Script'라고 출력됩니다.
이유인즉슨, '{ }'(중괄호)를 사용하여 array[0], array[1] 등을 하나의 변수로 처리해 주지 않으면, [0], [1] 등을 인식하지 못하고 해당 배열의 첫 번째 인덱스값만 불러오게 되어 있기 때문입니다.
꼭 배열을 사용할 때 뿐만 아니라, 많은 경우에서 '{ }'(중괄호)를 필요로 하게 됩니다.
'이것은 변수다'라는 것을 명시적으로 표기하여 소스의 가독성을 높이고자 한다면, 변수 호출 시마다 '{ }'(중괄호)를 붙여주는 것이 좋습니다.
다음은 뭉탱이로 배열에 값을 할당하여 주는 방법입니다.
뭉탱이로 배열에 값을 할당하는 방법도 몇 가지가 있는데, 그 중 사용이 쉽고 자주 쓰이는 두 가지 방식만 살펴보도록 하겠습니다.
첫 번째 방식은 다음과 같습니다.
array=(shell script programming)
일일이 값을 할당하는 방식에 비해 훨씬 간결하죠?
배열의 인덱스마다 일일이 값을 할당하나, 괄호를 사용하여 한 번에 할당하나 변수 호출의 결과는 같습니다.
또 다른 뭉탱이 할당 방식은 파일을 읽어들이는 것입니다.
다음 예제를 보시죠.
shell script programming
array=$(cat test.txt)
echo ${array[0]}
위와 같이 'shell script programming' 이라는 문자열을 담고 있는 파일이 있다면, shell 커맨드인 'cat' 을 이용하여 값을 불러와 배열에 할당할 수 있습니다.
Shell Script를 짜다 보면 여러 파일에서 값을 불러와 배열에 저장하고 사용하는 경우가 종종 생기는 데 그 때 위 예제처럼 사용하면 됩니다.
그리고 이전에도 한 번 강조했던 내용이지만, 배열 변수에 값을 할당할 때도 '='(equal) 앞뒤로 절대 공백이 존재하면 안된다는 것을 명심하시기 바랍니다.
-------------------------------------------------------------------------------------------------------------------
배열(Array) : 선언하기
1 2 | array_name_1=( "value 1" "value 2" "value 3" ) array_name_2=(1 2 3) |
배열(Array) : 참조하기
1 2 3 4 5 6 7 8 9 | array_name=( "value 1" "value 2" "value 3" ) echo "array_name[0] = ${array_name[0]}" #print array_name[0] echo "array_name[2] = ${array_name[2]}" #print array_name[2] echo "array_name[*] = ${array_name[*]}" #print array_name all item echo "array_name[@] = ${array_name[@]}" #print array_name all item echo "array_name index = ${!array_name[@]}" #print array_name index number echo "array_name size = ${#array_name[@]}" #print array_name size echo "array_name[0] size= ${#array_name[0]}" #print array_name[0] size |
출력 결과
array_name[2] = value 3
array_name[*] = value 1 value 2 value 3
array_name[@] = value 1 value 2 value 3
array_name index = 0 1 2
array_name size = 3
array_name[0] size= 7
배열(Array) : 크기 구하기
1 2 3 | array_name_1=( "value 1" "value 2" "value 3" ) echo ${ #array_name_1[@]} #print "3" |
배열(Array) : 출력하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | array_name=( "value 1" "value 2" "value 3" ) echo "array = ${array_name[@]}" # 출력 결과 # array = value 1 value 2 value 3 printf "value = %s\n" "${array_name[@]}" # 출력 결과 # value = value 1 # value = value 2 # value = value 3 for value in "${array_name[@]}" ; do echo $value done # 출력 결과 # value 1 # value 2 # value 3 for (( i = 0 ; i < ${ #array_name[@]} ; i++ )) ; do echo "value[$i] = ${array_name[$i]}" done # 출력 결과 # value[0] = value 1 # value[1] = value 2 # value[2] = value 3 for index in ${!array_name[*]} ; do printf "%4d: %s\n" "$index" "${array_name[$index]}" done # 출력 결과 # 0: value 1 # 1: value 2 # 2: value 3 |