Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Linux 셸 스크립팅에서 배열 작업 – 8부

배열 개념이 없는 프로그래밍 언어는 상상할 수 없습니다. 다양한 언어에서 구현되는 방식은 중요하지 않습니다. 대신 배열은 유사하거나 다른 데이터를 하나의 상징적 이름으로 통합하는 데 도움이 됩니다.

Linux 셸 스크립팅에서 배열 작업 – 8부

여기에서 쉘 스크립팅에 대해 우려하고 있으므로 이 기사는 배열 개념을 사용하는 일부 쉘 스크립트를 사용하는 데 도움이 될 것입니다.

배열 초기화 및 사용

최신 버전의 bash에서는 1차원 배열을 지원합니다. 배열은 declare에 의해 명시적으로 선언될 수 있습니다. 쉘 내장.

선언 -a var 

그러나 위와 같이 배열 변수를 선언할 필요는 없습니다. 다음과 같이 개별 요소를 직접 배열에 삽입할 수 있습니다.

var[XX]=<값>

여기서 'XX'는 배열 인덱스를 나타냅니다. 배열 요소를 역참조하려면 중괄호 구문을 사용하십시오. 예:

${var[XX]}

참고 :배열 인덱싱은 항상 0으로 시작합니다.

전체 배열을 초기화하는 또 다른 편리한 방법은 아래와 같이 괄호 쌍을 사용하는 것입니다.

var=( 요소1 요소2 요소3 ... 요소N )

배열에 값을 할당하는 또 다른 방법이 있습니다. 이 초기화 방법은 앞에서 설명한 방법의 하위 범주입니다.

배열=( [XX]=<값> [XX]=<값> ... )

read를 사용하여 실행 시간 동안 배열에 값을 읽거나 할당할 수도 있습니다. 쉘 내장.

배열 읽기

이제 스크립트 내에서 위의 명령문을 실행하면 일부 입력을 기다립니다. 공백으로 구분된 배열 요소를 제공해야 합니다(캐리지 리턴이 아님). 값을 입력한 후 엔터를 눌러 종료합니다.

배열 요소를 순회하기 위해 for 루프를 사용할 수도 있습니다.

"${array[@]}"의 i에 대해 #각 요소에 $i로 액세스합니다. . .완료 

다음 스크립트는 이 특정 섹션의 내용을 요약합니다.

#!/bin/bash array1[0]=one array1[1]=1 echo ${array1[0]} echo ${array1[1]} array2=( 하나 둘 셋 ) echo ${array2[0 ]} echo ${array2[2]} array3=( [9]=nine [11]=11 ) echo ${array3[9]} echo ${array3[11]} "${ array4[@]}" 에코 $i 완료 종료 0

배열에 대한 다양한 작업

많은 표준 문자열 작업이 배열에서 작동합니다. 배열에 대한 일부 작업(문자열 작업 포함)을 구현하는 다음 샘플 스크립트를 보십시오.

#!/bin/bash array=( 사과 박쥐 고양이 개 코끼리 개구리 ) #첫 번째 요소 인쇄 echo ${array[0]} echo ${array:0} #모든 요소 표시 echo ${array[@]} echo ${array[@]:0} #첫 번째 요소를 제외한 모든 요소 표시 echo ${array[@]:1} #범위의 요소 표시 echo ${array[@]:1:4} #첫 번째 요소의 길이 echo ${#array[0]} echo ${#array} #요소 수 echo ${#array[*]} echo ${#array[@]} #부분 문자열 교체 echo ${array[@]//a /A} 0번 출구

다음은 위의 스크립트를 실행할 때 생성되는 출력입니다.

사과 사과 사과 박쥐 고양이 개 코끼리 개구리 사과 박쥐 고양이 개 코끼리 개구리 박쥐 고양이 개 코끼리 개구리 박쥐 고양이 강아지 코끼리 5 5 6 6 Apple bAt cat dog elephAnt frog

위의 스크립트는 자명하기 때문에 자세히 설명하는 것은 의미가 없다고 생각합니다. 필요한 경우 이 시리즈의 한 부분을 문자열 조작에 대해서만 할애하겠습니다.

배열을 사용한 명령 대체

명령 대체는 명령 또는 여러 명령의 출력을 다른 컨텍스트에 할당합니다. 여기 배열의 컨텍스트에서 명령의 출력을 배열의 개별 요소로 삽입할 수 있습니다. 구문은 다음과 같습니다.

배열=( $(명령) )

기본적으로 공백으로 구분된 명령 출력의 내용은 개별 요소로 배열에 연결됩니다. 다음 스크립트는 755 권한을 가진 파일인 디렉토리의 내용을 나열합니다.

#!/bin/bash ERR=27 EXT=0 if [ $# -ne 1 ]; then echo "사용법:$0 <경로>" exit $ERR fi if [ ! -d $1 ]; then echo "$1 디렉토리가 존재하지 않습니다" exit $ERR fi temp=( $(find $1 -maxdepth 1 -type f) ) for i in "${temp[@]}" do perm=$(ls -l $ i) if [ `expr ${perm:0:10} :"-rwxr-xr-x"` -eq 10 ]; 그런 다음 echo ${i##*/} fi 완료 $EXT 종료

2차원 배열 시뮬레이션

1차원 배열을 사용하여 2차원 행렬을 쉽게 나타낼 수 있습니다. 행 주요 순서 행렬의 각 행에 있는 표현 요소는 순차적 방식으로 배열 인덱스에 점진적으로 저장됩니다. mXn 행렬의 경우 동일한 공식을 다음과 같이 작성할 수 있습니다.

행렬[i][j]=배열[n*i+j]

2개의 행렬을 추가하고 결과 행렬을 인쇄하는 다른 샘플 스크립트를 살펴보세요.

#!/bin/bash read -p "행렬 순서 입력 [mxn] :" t m=${t:0:1} n=${t:2:1} echo "첫 번째 행렬의 요소를 입력하십시오 " for i in `seq 0 $(($m-1))` do for j in `seq 0 $(($n-1))` do read x[$(($n*$i+$j)) ] done done echo "두 번째 행렬의 요소를 입력하세요" for i in `seq 0 $(($m-1))` do for j in `seq 0 $(($n-1))` do read y[$ (($n*$i+$j))] z[$(($n*$i+$j))]=$((${x[$(($n*$i+$j))]}+ ${y[$(($n*$i+$j))]})) done done echo "추가 후 행렬은" for i in `seq 0 $(($m-1))` do for j in ` seq 0 $(($n-1))` do echo -ne "${z[$(($n*$i+$j))]}\t" 완료 echo -e "\n" 종료 0  

셸 스크립팅 내에서 배열을 구현하는 데 제한이 있지만 특히 명령 대체로 처리할 때 소수의 상황에서 유용합니다. 관리적 관점에서 보면 배열의 개념은 GNU/Linux 시스템에서 많은 배경 스크립트를 개발할 수 있는 길을 열었습니다.