배열 요소에 액세스
그렇다면 배열은 어디에 좋은가요? 스프레드시트 프로그램으로 많은 데이터 관리 작업을 수행할 수 있는 것처럼 배열을 사용하여 많은 프로그래밍 작업을 수행할 수 있습니다.
간단한 데이터 수집 및 프레젠테이션 예제를 살펴보겠습니다. 지정된 디렉터리에 있는 파일의 수정 시간을 검사하는 스크립트를 구성하겠습니다. 이 데이터를 통해 스크립트는 파일이 마지막으로 수정된 시간을 보여주는 테이블을 출력합니다. 이러한 스크립트는 시스템이 가장 활동적인 시기를 결정하는 데 사용될 수 있습니다. 이 스크립트는 시간, 다음 결과를 생성합니다.
[me@linuxbox ~]$ 시간 .
시간 | 파일 | 시간 | 파일 |
---- | ----- | ---- | ----- |
00 | 0 | 12 | 11 |
01 | 1 | 13 | 7 |
02 | 0 | 14 | 1 |
03 | 0 | 15 | 7 |
04 | 1 | 16 | 6 |
05 | 1 | 17 | 5 |
06 | 6 | 18 | 4 |
07 | 3 | 19 | 4 |
08 | 1 | 20 | 1 |
09 | 14 | 21 | 0 |
10 | 2 | 22 | 0 |
11 | 5 | 23 | 0 |
총 파일 = 80
우리는 시간 프로그램에서 현재 디렉터리를 대상으로 지정합니다. 하루 중 각 시간(0-23)에 대해 마지막으로 수정된 파일 수를 보여주는 테이블을 생성합니다. 이를 생성하는 코드는 다음과 같습니다.
#! / bin / bash
# 시간: 수정 시간 사용량에 따라 파일 수를 계산하는 스크립트 () {
echo "사용법: ${0##*/} 디렉토리" >&2
}
#! / bin / bash
# 시간: 수정 시간 사용량에 따라 파일 수를 계산하는 스크립트 () {
echo "사용법: ${0##*/} 디렉토리" >&2
}
# [[ ! -d $1 ]]; 그 다음에
이용출구 1
fi
# 배열 초기화
나는 {0..23}에서; 시간[i]=0; 완료
# 데이터를 수집하다
for i in $(stat -c %y "$1"/* | cut -c 12-13); j=${i/#0} 하세요
((++시간[j])) ((++개수))
한
# 데이터 표시
echo -e "시간\t파일\t시간\t파일" echo -e "----\t----\t----\t----" for i in {0..11} ; 하다
j=$((i + 12))
printf "%02d\t%d\t%02d\t%d\n" $i ${시간[i]} $j ${시간[j]} 완료
printf "\n총 파일 = %d\n" $count
# [[ ! -d $1 ]]; 그 다음에
이용출구 1
fi
# 배열 초기화
나는 {0..23}에서; 시간[i]=0; 완료
# 데이터를 수집하다
for i in $(stat -c %y "$1"/* | cut -c 12-13); j=${i/#0} 하세요
((++시간[j])) ((++개수))
한
# 데이터 표시
echo -e "시간\t파일\t시간\t파일" echo -e "----\t----\t----\t----" for i in {0..11} ; 하다
j=$((i + 12))
printf "%02d\t%d\t%02d\t%d\n" $i ${시간[i]} $j ${시간[j]} 완료
printf "\n총 파일 = %d\n" $count
스크립트는 하나의 함수(용법) 및 XNUMX개의 섹션으로 구성된 본체. 첫 번째 섹션에서는 명령줄 인수가 있고 디렉터리인지 확인합니다. 그렇지 않은 경우 사용법 메시지를 표시하고 종료합니다.
두 번째 섹션에서는 배열을 초기화합니다. 시간. 이는 각 요소에 XNUMX 값을 할당하여 수행됩니다. 사용하기 전에 배열을 준비해야 하는 특별한 요구 사항은 없지만, 스크립트에서는 비어 있는 요소가 없는지 확인해야 합니다. 루프가 구성되는 흥미로운 방식에 주목하십시오. 버팀대 확장({0..23}), 우리는 다음 단어에 대한 일련의 단어를 쉽게 생성할 수 있습니다. for 명령.
다음 섹션에서는 다음을 실행하여 데이터를 수집합니다. 스탯 디렉토리의 각 파일에 대해 프로그램을 실행합니다. 우리는 사용 절단 결과에서 두 자리 시간을 추출합니다. 루프 내에서 시간 필드에서 앞에 오는 00을 제거해야 합니다. 왜냐하면 쉘이 "09"부터 "34"까지의 값을 2진수로 해석하려고 시도(결국 실패)하기 때문입니다(표 XNUMX-XNUMX 참조). 다음으로, 하루 중 시간에 해당하는 배열 요소의 값을 증가시킵니다. 마지막으로 카운터(계산) 디렉토리에 있는 총 파일 수를 추적합니다.
스크립트의 마지막 섹션에는 배열의 내용이 표시됩니다. 먼저 두 개의 헤더 라인을 출력한 다음 XNUMX개의 출력 열을 생성하는 루프를 입력합니다. 마지막으로 파일의 최종 집계를 출력합니다.