Bash 배열로 데이터를 조작하고 제어하는 ​​방법

Bash Baeyeollo Deiteoleul Jojaghago Jeeohaneun Bangbeob



배열 변수는 모든 프로그래밍 언어에서 인덱스를 사용하여 여러 값을 저장하는 데 사용됩니다. 배열 인덱스는 숫자 또는 문자열일 수 있습니다. 숫자 인덱스를 포함하는 배열을 '숫자 배열'이라고 하며, 문자열 값을 인덱스로 포함하는 배열을 '연관 배열'이라고 합니다. Bash에서는 숫자 배열과 연관 배열을 모두 만들 수 있습니다. Bash 배열의 데이터를 조작하고 제어하는 ​​방법은 이 튜토리얼의 15개 예제를 사용하여 자세히 보여줍니다.

콘텐츠 목록:

  1. 인덱스로 배열 정의
  2. 여러 값으로 배열 정의
  3. 연관 배열 정의
  4. 배열 값 계산
  5. 루프를 통해 배열 값 읽기
  6. 배열의 특정 값 읽기
  7. 배열 값 삽입
  8. 배열로 파일 콘텐츠 읽기
  9. 배열 값 결합
  10. 배열 값 수정
  11. 배열 값 제거
  12. 배열 값 검색 및 바꾸기
  13. 배열을 함수 인수로 사용
  14. 함수에서 배열 반환
  15. 배열을 비우기

인덱스로 배열 정의

순차 또는 비순차 숫자 인덱스를 언급하여 배열을 선언하는 방법은 다음 스크립트에 나와 있습니다. 이러한 유형의 배열을 숫자형 배열이라고 합니다. 여기서는 3개의 순차 인덱스를 정의하여 “$books” 배열을 생성하고, 4개의 비순차 인덱스를 정의하여 “$products” 배열을 생성합니다. 두 배열의 모든 값은 'printf' 함수를 사용하여 인쇄됩니다.







#!/bin/bash

#배열 인덱스를 순차적으로 정의

서적 [ 0 ] = 'bash 쉘 배우기'

서적 [ 1 ] = 'Bash를 사용한 사이버 보안 작전'

서적 [ 2 ] = 'Bash 명령줄 전문가 팁'

에코 '첫 번째 배열의 모든 값:'

printf '%s\n' ' ${도서[@]} '

#비순차적 순서로 배열 인덱스 정의

제품 [ 10 ] = '펜'

제품 [ 5 ] = '연필'

제품 [ 9 ] = '규칙'

제품 [ 4 ] = 'A4사이즈 용지'

에코

에코 '두 번째 배열의 모든 값:'

printf '%s\n' ' ${제품[@]} '

산출 :



스크립트를 실행하면 다음 출력이 나타납니다. 두 배열의 값이 출력에 인쇄됩니다. 비순차적 인덱스 배열에 대한 인쇄 시 인덱스 순서가 유지됩니다.



  p1





맨 위로 이동

여러 값으로 배열 정의

여러 값이 있는 숫자 배열은 -a 옵션과 함께 'declare' 명령을 사용하거나 'declare' 명령을 사용하지 않고 선언할 수 있습니다. 다음 스크립트에서는 'declare' 명령을 사용하여 첫 번째 배열을 선언하고 'declare' 명령을 사용하지 않고 두 번째 배열을 생성합니다.



#!/bin/bash

#'declare' 키워드를 사용하여 숫자형 배열을 선언합니다.

선언하다 -ㅏ 이름 = ( '남자 이름' '데이비드' '알렉산더' '도마' '로버트' '리차드' )

#배열 값을 인쇄합니다.

에코 '첫 번째 배열의 모든 값:'

printf '%s\n' ' ${이름[@]} '

#'declare' 키워드 없이 숫자형 배열 선언

서적 = ( '쉘 스크립팅 튜토리얼' 'Bish Bash Bosh!' 'Bash를 빠르게 배우세요' )

#개행 추가

에코

#배열 값을 인쇄합니다.

에코 '두 번째 배열의 모든 값:'

printf '%s\n' ' ${도서[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 두 배열의 값이 여기에 인쇄됩니다.

  p2

맨 위로 이동

연관 배열 정의

문자열 값을 인덱스로 포함하는 배열을 연관 배열이라고 합니다. -A 옵션은 Bash의 'declare' 명령과 함께 사용되어 연관 Bash 배열을 생성합니다. 다음 스크립트에서 첫 번째 연관 배열은 인덱스를 별도로 언급하여 선언되고 두 번째 배열은 배열 선언 시 모든 키-값 쌍을 언급하여 선언됩니다.

#!/bin/bash

#값 없이 연관 배열 변수 선언

선언하다 -ㅏ 직원

#인덱스를 정의하여 별도로 값을 할당

직원 [ 'ID' ] = '78564'

직원 [ '이름' ] = '배우 가능'

직원 [ '우편' ] = '최고 경영자'

직원 [ '샐러리' ] = 300000

#배열의 두 값을 인쇄합니다.

에코 '직원 ID: ${직원[ID]} '

에코 '직원 이름: ${직원[이름]} '

#값이 포함된 연관 배열 선언

선언하다 -ㅏ 강의 = ( [ 암호 ] = 'CSE-206' [ 이름 ] = '객체 지향 프로그래밍' [ Credit_hour ] = 2.0 )

#개행 추가

에코

#두 번째 배열의 두 배열 값을 인쇄합니다.

에코 '과정 이름: ${강좌[이름]} '

에코 '신용시간: ${과정[학점_시간]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 연관 배열의 특정 값은 키 또는 인덱스 값을 언급하여 여기에 인쇄됩니다.

  p3

맨 위로 이동

배열 값 계산

숫자형 배열과 연관 배열의 전체 요소를 계산하는 방법은 다음 스크립트에 나와 있습니다.

#!/bin/bash

#숫자형 배열 선언

선언하다 -ㅏ 이름 = ( '남자 이름' '데이비드' '알렉산더' '도마' '로버트' '리차드' ) ;

에코 '숫자 배열의 길이는 ${#이름[@]} '

#연관배열 선언

선언하다 -ㅏ 강의 = ( [ 암호 ] = 'CSE-206' [ 이름 ] = '객체 지향 프로그래밍' [ Credit_hour ] = 2.0 )

에코 '연관배열의 길이는 ${#강좌[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 숫자형 배열과 연관형 배열의 배열 길이는 여기에 인쇄됩니다.

  p4

맨 위로 이동

루프를 통해 배열 값 읽기

'for' 루프를 사용하여 숫자형 배열과 연관 배열의 모든 값을 읽는 방법은 다음 스크립트에 나와 있습니다.

#!/bin/bash

#숫자형 배열 선언

선언하다 -ㅏ 서적 = ( '쉘 스크립팅 튜토리얼' '비쉬배쉬보쉬!' 'Bash를 빨리 배우세요' )

#숫자 배열 값을 인쇄합니다.

에코 '숫자 배열 값은 다음과 같습니다:'

~을 위한 ~에 ~에 ' ${도서[@]} '

하다

에코 ' $in '

완료

에코

#값이 포함된 연관 배열 선언

선언하다 -ㅏ 클라이언트 = (

[ ID ] = 'H-5623'

[ 이름 ] = '씨. 아나프'

[ 주소 ] = '6/A, 단몬디, 다카.'

[ 핸드폰 ] = '+8801975642312' )

#연관 배열 값을 인쇄합니다.

에코 '연관 배열 값은 다음과 같습니다:'

~을 위한 케이 ~에 ' ${!클라이언트[@]} '

하다

에코 ' $k => ${클라이언트[$k]} '

완료

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 여기서는 숫자 배열의 값과 연관 배열의 키-값 쌍이 출력에 인쇄됩니다.

  p5

맨 위로 이동

배열 값의 특정 범위 읽기

특정 인덱스 범위의 배열 값은 다음 스크립트에 표시됩니다. 스크립트에는 4개 요소의 숫자 배열이 정의됩니다. 배열의 두 번째 인덱스에서 두 개의 배열 값이 나중에 인쇄됩니다.

#!/bin/bash

#숫자형 배열 선언

선언하다 -ㅏ 케이크 = ( '초코 케이크' '바닐라 케이크' '레드 벨벳 케이크' '딸기 케이크' )

#특정 배열 값을 인쇄합니다.

에코 '배열 값의 두 번째 및 세 번째 요소는 다음과 같습니다.'

printf '%s\n' ' ${케이크[@]:1:2} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 배열의 두 번째 및 세 번째 값은 출력에 인쇄되는 “Vanilla Cake” 및 “Red Velvet Cake”입니다.

  p6

맨 위로 이동

배열 값 삽입

배열 끝에 여러 값을 추가하는 방법은 다음 스크립트에 나와 있습니다. '$books'인 기본 배열에는 세 개의 요소가 포함되어 있으며 '$books' 배열의 끝에 두 개의 요소가 추가됩니다.

#!/bin/bash

#숫자형 배열 선언

선언하다 -ㅏ 서적 = ( '쉘 스크립팅 튜토리얼' '비쉬배쉬보쉬!' 'Bash를 빨리 배우세요' )

#삽입하기 전에 배열 값을 인쇄합니다.

에코 '배열 값:'

printf '%s\n' ' ${도서[@]} '

에코

서적 = ( ' ${도서[@]} ' 'Linux 명령줄 및 쉘 스크립팅 성경' 'Mendel Cooper의 고급 Bash 스크립팅 가이드' )

#삽입 후 배열 값을 인쇄합니다.

에코 '두 개의 값을 삽입한 후의 배열 값:'

printf '%s\n' ' ${도서[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 새 값을 삽입하기 전과 후의 배열 값이 출력에 인쇄됩니다.

  p7

맨 위로 이동

파일 내용을 배열로 읽어 들입니다.

이 예제의 스크립트를 테스트하려면 다음 내용으로 'fruits.txt'라는 텍스트 파일을 만듭니다.

과일.txt

망고

잭푸르트

파인애플

주황색

바나나

다음 스크립트에서는 파일 내용이 '$data'라는 배열에 저장됩니다. 여기서 파일의 각 행은 배열의 각 요소로 저장됩니다. 다음으로 배열 값이 인쇄됩니다.

#!/bin/bash

#사용자로부터 파일 이름 읽기

읽다 -피 '파일 이름을 입력하세요:' 파일 이름

만약에 [ -에프 $파일이름 ]

그 다음에

#파일 내용을 배열로 읽어옵니다.'

데이터 = ( ` 고양이 ' $파일이름 ' ` )

에코 '파일 내용은 아래와 같습니다.'

#파일을 한 줄씩 읽습니다.

~을 위한 ~에 ' ${데이터[@]} '

하다

에코 $line

완료

BE

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 'cat' 명령으로 표시되는 출력과 스크립트의 출력은 'cat' 명령과 스크립트로 동일한 파일에 액세스하므로 유사합니다.

  p8

맨 위로 이동

배열 값 결합

여러 배열의 값을 결합하여 새 배열이 생성됩니다. 다음 스크립트에서는 두 개의 문자열 숫자 배열이 정의됩니다. 그런 다음 이러한 배열의 값을 결합하여 새 배열이 생성됩니다.

#!/bin/bash

#첫 번째 배열 선언

선언하다 -ㅏ 이름목록1 = ( '남자 이름' '데이비드' '알렉산더' '도마' )

에코 '첫 번째 배열 값은 다음과 같습니다.'

printf '%s,' ${nameList1[@]}

에코

#두 번째 배열 선언

선언하다 -ㅏ 이름목록2 = ( '로버트' '리처드' )

에코 '두 번째 배열 값은 다음과 같습니다.'

printf '%s,' ${nameList2[@]}

에코

#두 개의 배열을 결합하여 새로운 배열 생성

결합_배열 = ( ' ${nameList1[@]} ' ' ${nameList2[@]} ' )

에코 '결합된 배열 값은 다음과 같습니다.'

printf '%s,' ${combined_array[@]}

에코

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 여기서는 세 배열의 값이 출력에 인쇄됩니다. 세 번째 배열에는 첫 번째 배열과 두 번째 배열의 모든 값이 포함됩니다.

  p9

맨 위로 이동

배열 값 수정

인덱스를 언급하여 하나 이상의 배열 값을 업데이트하는 방법은 다음 스크립트에 표시됩니다.

#!/bin/bash

#첫 번째 배열 선언

선언하다 -ㅏ 명부 = ( '남자 이름' '데이비드' '알렉산더' '도마' )

에코 '배열 값:'

printf '%s,' ${nameList[@]}

에코

#배열의 두 번째 값 업데이트

명부 [ 1 ] = '로버트'

에코 '업데이트 후 배열 값:'

printf '%s,' ${nameList[@]}

에코

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 기본 배열과 업데이트된 배열의 값이 출력에 인쇄됩니다.

  p10

배열 값 제거

'unset' 명령은 배열의 특정 요소 또는 모든 요소를 ​​제거하는 데 사용됩니다. 다음 스크립트에서는 배열의 두 번째 요소가 제거됩니다.

#!/bin/bash

#숫자형 배열 선언

선언하다 -ㅏ 서적 = ( '쉘 스크립팅 튜토리얼' '비쉬배쉬보쉬!' 'Bash를 빨리 배우세요' )

#제거하기 전에 배열 값을 인쇄합니다.

에코 '배열 값:'

printf '%s\n' ' ${도서[@]} '

에코

#두 번째 요소 제거

설정되지 않음 서적 [ 1 ]

#제거 후 배열 값을 인쇄합니다.

에코 '두 번째 값을 제거한 후의 배열 값:'

printf '%s\n' ' ${도서[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 기본 배열의 값과 하나의 값을 제거한 후의 배열 값이 출력에 인쇄됩니다.

  p11

맨 위로 이동

배열 값 검색 및 바꾸기

다음 스크립트에서는 패턴에 정의된 검색 값이 '$names' 배열의 값과 일치하는 경우 배열의 특정 값이 다른 값으로 대체됩니다.

#!/bin/bash

#첫 번째 배열 선언

선언하다 -ㅏ 이름 = ( '남자 이름' '데이비드' '알렉산더' '도마' )

#원래 배열 값을 인쇄합니다.

에코 '원래 배열 값:'

printf '%s\n' ' ${이름[@]} '

#배열 값을 교체한 후 문자열 생성

업데이트_배열 = ${이름[@]/Alexander/Richard}

#교체 후 배열 값을 인쇄합니다.

에코 '교체 후 배열 값:'

printf '%s\n' ' ${updated_array[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 기본 배열의 값과 값을 바꾼 후의 배열 값이 출력에 인쇄됩니다.

  p12

맨 위로 이동

배열을 함수 인수로 사용

다음 스크립트에서는 배열 변수가 함수 인수로 전달되고 해당 배열의 값이 나중에 인쇄됩니다.

#!/bin/bash

#숫자 배열 선언

선언하다 -ㅏ 숫자 = ( 10 6 넷 다섯 13 8 )

#인수값을 취하는 함수 정의

기능 ( )

{

#첫 번째 인수 읽기

숫자 = $1

#배열 값을 인쇄합니다.

에코 '배열 값:'

printf '%d\n' ' ${숫자[@]} '

}

#배열을 인수로 사용하여 함수 호출

기능 ' ${숫자[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다.

  p13

맨 위로 이동

함수에서 배열 반환

다음 스크립트에서는 함수가 4개의 숫자 인수와 함께 호출됩니다. 인수 값을 사용하여 배열이 생성되고 해당 배열이 함수에서 호출자에게 반환됩니다.

#!/bin/bash

#네 개의 인수 값을 읽는 함수 정의

기능 ( )

{

#인수 값 읽기

숫자 = ( $1 $2 $3 $4 )

#배열을 반환

에코 ' ${숫자[@]} '

}

#세 개의 인수를 사용하여 함수 호출

return_val =$ ( 기능 78 넷 다섯 90 23 )

#반환값을 배열에 저장

읽다 -ㅏ 하나에 <<< $return_val

#반환된 배열의 값을 인쇄합니다.

에코 '배열의 값은 다음과 같습니다:'

~을 위한 ~에 ~에 ' ${번호[@]} '

하다

에코 ' $in '

완료

산출 :

스크립트를 실행하면 다음 출력이 나타납니다.

맨 위로 이동

배열을 비우기

다음 스크립트는 'unset' 명령을 사용하여 배열을 비우는 방법을 보여줍니다. 배열 값의 총 개수는 배열을 비우기 전과 후에 인쇄됩니다.

#!/bin/bash

#숫자 배열 선언

선언하다 -ㅏ 숫자 = ( 10 6 넷 다섯 13 80 )

에코 '배열 값의 수: ${#번호[@]} '

#배열을 비워둡니다

설정되지 않음 숫자

에코 '배열을 비운 후의 배열 값 수: ${#번호[@]} '

산출 :

스크립트를 실행하면 다음 출력이 나타납니다. 배열을 비운 후 배열의 요소 수가 0이 되었습니다.

  15페이지

맨 위로 이동

결론

이 튜토리얼에서는 Bash 스크립트에서 배열 변수를 선언, 액세스, 수정 및 제거하는 다양한 방법을 15가지 간단한 예를 통해 보여줍니다. 이 튜토리얼이 Bash 사용자가 Bash 배열의 사용법을 자세히 아는 데 도움이 되기를 바랍니다.