OnWorks Linux en Windows Online WorkStations

logo

Gratis online hosting voor werkstations

<Vorige | Inhoud | Volgende>

Toegang tot array-elementen

Dus waar zijn arrays goed voor? Net zoals veel gegevensbeheertaken kunnen worden uitgevoerd met een spreadsheetprogramma, kunnen veel programmeertaken met arrays worden uitgevoerd.

Laten we eens kijken naar een eenvoudig voorbeeld van gegevensverzameling en presentatie. We zullen een script construeren dat de wijzigingstijden van de bestanden in een opgegeven map onderzoekt. Op basis van deze gegevens zal ons script een tabel weergeven die laat zien op welk uur van de dag de bestanden voor het laatst zijn gewijzigd. Zo'n script zou kunnen worden gebruikt om te bepalen wanneer een systeem het meest actief is. Dit script, genaamd uur, levert dit resultaat op:


beeld

[ik@linuxbox ~]$ uur.


uur

Bestanden

uur

Bestanden

----

-----

----

-----

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

Totaal aantal bestanden = 80


Wij voeren de uur programma, waarbij de huidige map als doel wordt opgegeven. Het produceert een tabel die voor elk uur van de dag (0-23) laat zien hoeveel bestanden het laatst zijn gewijzigd. De code om dit te produceren is als volgt:



#! / Bin / bash

# uur: script om bestanden te tellen op basis van gebruik van wijzigingstijd () {

echo "gebruik: ${0##*/} map" >&2

}

#! / Bin / bash

# uur: script om bestanden te tellen op basis van gebruik van wijzigingstijd () {

echo "gebruik: ${0##*/} map" >&2

}


# Controleer of het argument een directory is als [[ ! -d $1 ]]; dan

gebruik exit 1

fi


# Initialiseer array

voor i in {0..23}; doe uren[i]=0; gedaan


# Data verzamelen

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

((++uur[j])) ((++telling))

gedaan


# Gegevens weergeven

echo -e "Hour\tFiles\tHour\tFiles" echo -e "----\t-----\t----\t-----" for i in {0..11} ; doen

j=$((ik + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]} gedaan

printf "\nTotaal aantal bestanden = %d\n" $count

# Controleer of het argument een directory is als [[ ! -d $1 ]]; dan

gebruik exit 1

fi


# Initialiseer array

voor i in {0..23}; doe uren[i]=0; gedaan


# Data verzamelen

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

((++uur[j])) ((++telling))

gedaan


# Gegevens weergeven

echo -e "Hour\tFiles\tHour\tFiles" echo -e "----\t-----\t----\t-----" for i in {0..11} ; doen

j=$((ik + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${hours[i]} $j ${hours[j]} gedaan

printf "\nTotaal aantal bestanden = %d\n" $count


Het script bestaat uit één functie (gebruik) en een hoofdgedeelte met vier secties. In de eerste sectie controleren we of er een opdrachtregelargument is en dat het een directory is. Als dit niet het geval is, geven we het gebruiksbericht weer en sluiten we af.

De tweede sectie initialiseert de array uur. Het doet dit door elk element een waarde van nul toe te kennen. Er is geen speciale vereiste om arrays voor gebruik voor te bereiden, maar ons script moet ervoor zorgen dat geen enkel element leeg is. Let op de interessante manier waarop de lus is geconstrueerd. Door gebruik te maken van brace-expansie ({0..23}), kunnen we gemakkelijk een reeks woorden genereren voor de For opdracht.

De volgende sectie verzamelt de gegevens door de staat programma op elk bestand in de map. We gebruiken gesneden om het tweecijferige uur uit het resultaat te halen. Binnen de lus moeten we voorloopnullen uit het uurveld verwijderen, omdat de shell zal proberen (en uiteindelijk zal falen) om de waarden "00" tot en met "09" als octale getallen te interpreteren (zie Tabel 34-2). Vervolgens verhogen we de waarde van het array-element dat overeenkomt met het uur van de dag. Ten slotte verhogen we een teller (tellen) om het totale aantal bestanden in de map bij te houden.

In het laatste gedeelte van het script wordt de inhoud van de array weergegeven. We voeren eerst een paar kopregels uit en gaan vervolgens een lus in die vier kolommen met uitvoer produceert. Ten slotte voeren we het uiteindelijke aantal bestanden uit.


Top OS Cloud Computing bij OnWorks: