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 przydadzą się tablice? Tak jak wiele zadań związanych z zarządzaniem danymi można wykonać za pomocą 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 będzie sprawdzał czasy modyfikacji plików w podanym katalogu. Na podstawie tych danych nasz skrypt wyświetli tabelę pokazującą, o której godzinie pliki zostały ostatnio zmodyfikowane. Takiego skryptu można użyć do określenia, kiedy system jest najbardziej aktywny. Ten skrypt, tzw godzin, daje następujący 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

Całkowita liczba plików = 80


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



#! / bin / bash

# godziny: skrypt zliczający pliki według zużycia czasu modyfikacji () {

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

}

#! / bin / bash

# godziny: skrypt zliczający pliki według zużycia czasu modyfikacji () {

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

}


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

wyjście z użytkowania 1

fi


# Zainicjuj tablicę

dla i w {0..23}; robić godziny[i]=0; zrobione


# Zbieraj dane

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

((++godzin[j])) ((++liczba))

zrobić


# Wyświetl dane

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

j=$((i + 12))

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

printf "\nWszystkie pliki = %d\n" $liczba

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

wyjście z użytkowania 1

fi


# Zainicjuj tablicę

dla i w {0..23}; robić godziny[i]=0; zrobione


# Zbieraj dane

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

((++godzin[j])) ((++liczba))

zrobić


# Wyświetl dane

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

j=$((i + 12))

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

printf "\nWszystkie pliki = %d\n" $liczba


Skrypt składa się z jednej funkcji (zwyczaj) i korpus główny składający się z czterech sekcji. W pierwszej sekcji sprawdzamy, czy istnieje argument wiersza poleceń i czy jest to katalog. Jeśli tak nie jest, wyświetlamy komunikat o użyciu i wychodzimy.

Druga sekcja inicjuje tablicę godzin. Robi to poprzez przypisanie każdemu elementowi wartości zero. Nie ma specjalnego wymogu przygotowania tablic przed użyciem, ale nasz skrypt musi upewnić się, że żaden element nie jest pusty. Zwróć uwagę na ciekawy sposób konstrukcji pętli. Stosując rozwinięcie nawiasów ({0..23}), jesteśmy w stanie łatwo wygenerować ciąg słów dla dla dowództwo.

Następna sekcja gromadzi dane, uruchamiając plik stan program na każdym pliku w katalogu. Używamy ciąć aby wyodrębnić z wyniku dwucyfrową godzinę. Wewnątrz pętli musimy usunąć zera wiodące z pola godzin, ponieważ powłoka będzie próbowała (i ostatecznie zakończy się niepowodzeniem) zinterpretować wartości od „00” do „09” jako liczby ósemkowe (patrz tabela 34). Następnie zwiększamy wartość elementu tablicy odpowiadającej 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 linii nagłówka, a następnie wchodzimy do pętli, która generuje cztery kolumny danych wyjściowych. Na koniec wyświetlamy ostateczną liczbę plików.


Najlepsze przetwarzanie w chmurze dla systemu operacyjnego w OnWorks: