Workstation online OnWorks Linux e Windows

Logo

Hosting online gratuito per workstation

<Precedenti | Contenuti | Succ.>

Accesso agli elementi dell'array

Quindi a cosa servono gli array? Proprio come molte attività di gestione dei dati possono essere eseguite con un foglio di calcolo, molte attività di programmazione possono essere eseguite con gli array.

Consideriamo un semplice esempio di raccolta e presentazione dei dati. Costruiremo uno script che esamini i tempi di modifica dei file in una directory specificata. Da questi dati, il nostro script produrrà una tabella che mostra a quale ora del giorno i file sono stati modificati l'ultima volta. Tale script potrebbe essere utilizzato per determinare quando un sistema è più attivo. Questo script, chiamato ore, produce questo risultato:


Immagine

[io@linuxbox~]$ ore .


ora

File

ora

File

----

-----

----

-----

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

File totali = 80


Eseguiamo il ore programma, specificando la directory corrente come destinazione. Produce una tabella che mostra, per ogni ora del giorno (0-23), quanti file sono stati modificati l'ultima volta. Il codice per produrlo è il seguente:



#! / Bin / bash

# ore: script per contare i file in base all'utilizzo del tempo di modifica () {

echo "utilizzo: ${0##*/} directory" >&2

}

#! / Bin / bash

# ore: script per contare i file in base all'utilizzo del tempo di modifica () {

echo "utilizzo: ${0##*/} directory" >&2

}


# Verifica che l'argomento sia una directory se [[ ! -d $1 ]]; poi

uscita d'uso 1

fi


# Inizializza l'array

per io in {0..23}; fare ore[i]=0; fatto


# Raccogliere dati

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

((++ore[j])) ((++count))

fatto


# Mostra dati

echo -e "Ora\tFile\tOra\tFile" echo -e "----\t-----\t----\t-----" for i in {0..11} ; fare

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${ore[i]} $j ${ore[j]} fatto

printf "\nFile totali = %d\n" $count

# Verifica che l'argomento sia una directory se [[ ! -d $1 ]]; poi

uscita d'uso 1

fi


# Inizializza l'array

per io in {0..23}; fare ore[i]=0; fatto


# Raccogliere dati

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

((++ore[j])) ((++count))

fatto


# Mostra dati

echo -e "Ora\tFile\tOra\tFile" echo -e "----\t-----\t----\t-----" for i in {0..11} ; fare

j=$((i + 12))

printf "%02d\t%d\t%02d\t%d\n" $i ${ore[i]} $j ${ore[j]} fatto

printf "\nFile totali = %d\n" $count


Lo script è costituito da una funzione (uso) e un corpo principale con quattro sezioni. Nella prima sezione, controlliamo che ci sia un argomento della riga di comando e che sia una directory. In caso contrario, visualizziamo il messaggio di utilizzo e usciamo.

La seconda sezione inizializza l'array ore. Lo fa assegnando a ciascun elemento un valore pari a zero. Non è richiesto alcun requisito speciale per preparare gli array prima dell'uso, ma il nostro script deve garantire che nessun elemento sia vuoto. Notare l'interessante modo in cui è costruito il ciclo. Utilizzando l'espansione del tutore ({0..23}), siamo in grado di generare facilmente una sequenza di parole per il per comando.

La sezione successiva raccoglie i dati eseguendo il stat programma su ogni file nella directory. Noi usiamo taglio per estrarre l'ora a due cifre dal risultato. All'interno del ciclo, dobbiamo rimuovere gli zeri iniziali dal campo dell'ora, poiché la shell tenterà (e alla fine fallirà) di interpretare i valori da "00" a "09" come numeri ottali (vedere la Tabella 34-2). Successivamente, incrementiamo il valore dell'elemento dell'array corrispondente all'ora del giorno. Infine, incrementiamo un contatore (contare) per tenere traccia del numero totale di file nella directory.

L'ultima sezione dello script mostra il contenuto dell'array. Prima emettiamo un paio di righe di intestazione e poi inseriamo un ciclo che produce quattro colonne di output. Infine, emettiamo il conteggio finale dei file.


Il miglior sistema operativo cloud computing su OnWorks: