OnWorks Linux i Windows Online WorkStation

logo

Darmowy hosting online dla stacji roboczych

<Poprzedni | Spis treści | Następne>

Dostęp do elementów tablicy

Do czego więc nadają się tablice? Tak jak wiele zadań zarządzania danymi można wykonać za pomocą programu arkusza kalkulacyjnego, tak wiele zadań programistycznych można wykonać za pomocą tablic.

Rozważmy prosty przykład gromadzenia i prezentacji danych. Skonstruujemy skrypt, który bada czasy modyfikacji plików w określonym katalogu. Na podstawie tych danych nasz skrypt wyprowadzi tabelę pokazującą, o której godzinie pliki zostały ostatnio zmodyfikowane. Taki skrypt można wykorzystać do określenia, kiedy system jest najbardziej aktywny. Ten skrypt, zwany godzin, daje taki wynik:


obraz

[ja@linuxbox ~]$ godziny .


Godzina

Akta

Godzina

Akta

----

-----

----

-----

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

Łączna liczba plików = 80


Wykonujemy godzin program, określając bieżący katalog jako cel. Tworzy tabelę pokazującą dla każdej godziny dnia (0-23), ile plików zostało ostatnio zmodyfikowanych. Kod do jej wygenerowania jest następujący:



#! / bin / bash

# godziny: skrypt do liczenia plików według czasu modyfikacji () {

echo "użycie: katalog ${0##*/" >&2

}

#! / bin / bash

# godziny: skrypt do liczenia plików według czasu modyfikacji () {

echo "użycie: katalog ${0##*/" >&2

}


# Sprawdź, czy argument jest katalogiem, jeśli [[ ! -d $1 ]]; wtedy

użycie wyjścia 1

fi


# Zainicjuj tablicę

dla i w {0..23}; wykonaj godziny[i]=0; gotowe


# Zbieraj dane

dla i w $(stat -c %y "$1"/* | cut -c 12-13); wykonaj j=${i/#0}

((++godziny[j])) ((++liczba))

zrobić


# Wyświetl dane

echo -e "Godzina\tPliki\tGodzina\tPliki" echo -e "----\t-----\t----\t-----" dla i w {0..11}; wykonaj

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${godziny[i]} $j ${godziny[j]} gotowe

printf "\nŁączna liczba plików = %d\n" $count

# Sprawdź, czy argument jest katalogiem, jeśli [[ ! -d $1 ]]; wtedy

użycie wyjścia 1

fi


# Zainicjuj tablicę

dla i w {0..23}; wykonaj godziny[i]=0; gotowe


# Zbieraj dane

dla i w $(stat -c %y "$1"/* | cut -c 12-13); wykonaj j=${i/#0}

((++godziny[j])) ((++liczba))

zrobić


# Wyświetl dane

echo -e "Godzina\tPliki\tGodzina\tPliki" echo -e "----\t-----\t----\t-----" dla i w {0..11}; wykonaj

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${godziny[i]} $j ${godziny[j]} gotowe

printf "\nŁączna liczba plików = %d\n" $count


Skrypt składa się z jednej funkcji (zwyczaj) i ciało główne z czterema sekcjami. W pierwszej sekcji sprawdzamy, czy istnieje argument wiersza poleceń i czy jest to katalog. Jeśli nie, wyświetlamy komunikat o użyciu i wychodzimy.

Druga sekcja inicjuje tablicę godzin. Robi to poprzez przypisanie każdemu elementowi wartości zerowej. Nie ma specjalnego wymogu przygotowania tablic przed użyciem, ale nasz skrypt musi upewnić się, że żaden element nie jest pusty. Zwróć uwagę na interesujący sposób konstrukcji pętli. Poprzez zastosowanie rozwinięcia nawiasu klamrowego ({0..23}), możemy łatwo wygenerować sekwencję słów dla dla dowództwo.

W następnej sekcji zbierane są dane poprzez uruchomienie stan program na każdym pliku w katalogu. Używamy ciąć aby wyodrębnić dwucyfrową godzinę z wyniku. Wewnątrz pętli musimy usunąć wiodące zera z pola godziny, ponieważ powłoka spróbuje (i ostatecznie się nie uda) zinterpretować wartości od „00” do „09” jako liczby ósemkowe (patrz Tabela 34-2). Następnie zwiększamy wartość elementu tablicy odpowiadającego godzinie dnia. Na koniec zwiększamy licznik (liczyć) aby śledzić całkowitą liczbę plików w katalogu.

Ostatnia sekcja skryptu wyświetla zawartość tablicy. Najpierw wyprowadzamy kilka wierszy nagłówka, a następnie wchodzimy w pętlę, która generuje cztery kolumny danych wyjściowych. Na koniec wyprowadzamy końcowy wynik plików.


Najlepsze przetwarzanie w chmurze dla systemu operacyjnego w OnWorks: