Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Acessando Elementos de Matriz

Então, para que servem os arrays? Assim como muitas tarefas de gerenciamento de dados podem ser executadas com um programa de planilha, muitas tarefas de programação podem ser executadas com matrizes.

Vamos considerar um exemplo simples de coleta de dados e apresentação. Vamos construir um script que examina os tempos de modificação dos arquivos em um diretório especificado. A partir desses dados, nosso script produzirá uma tabela mostrando em que hora do dia os arquivos foram modificados pela última vez. Esse script pode ser usado para determinar quando um sistema está mais ativo. Este script, chamado horas, produz este resultado:


imagem

[me @ linuxbox ~] $ horas.


hora

Arquivos

hora

Arquivos

----

-----

----

-----

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

Total de arquivos = 80


Nós executamos o horas programa, especificando o diretório atual como o destino. Produz uma tabela que mostra, para cada hora do dia (0-23), quantos arquivos foram modificados pela última vez. O código para produzir isso é o seguinte:



#! / Bin / bash

# horas: script para contar arquivos por uso de tempo de modificação () {

echo "uso: $ {0 ## * /} diretório"> & 2

}

#! / Bin / bash

# horas: script para contar arquivos por uso de tempo de modificação () {

echo "uso: $ {0 ## * /} diretório"> & 2

}


# Verifique se o argumento é um diretório se [[! -d $ 1]]; então

saída de uso 1

fi


# Inicializa a matriz

para i em {0..23}; fazer horas [i] = 0; feito


# Coletar dados

para i em $ (stat -c% y "$ 1" / * | cut -c 12-13); faça j = $ {i / # 0}

((++ horas [j])) ((++ contagem))

feito


# Mostrar dados

echo -e "Hora \ tArquivos \ tHour \ tArquivos" echo -e "---- \ t ----- \ t ---- \ t -----" para i em {0..11} ; Faz

j = $ ((i + 12))

printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {horas [i]} $ j $ {horas [j]} feito

printf "\ nArquivos totais =% d \ n" $ count

# Verifique se o argumento é um diretório se [[! -d $ 1]]; então

saída de uso 1

fi


# Inicializa a matriz

para i em {0..23}; fazer horas [i] = 0; feito


# Coletar dados

para i em $ (stat -c% y "$ 1" / * | cut -c 12-13); faça j = $ {i / # 0}

((++ horas [j])) ((++ contagem))

feito


# Mostrar dados

echo -e "Hora \ tArquivos \ tHour \ tArquivos" echo -e "---- \ t ----- \ t ---- \ t -----" para i em {0..11} ; Faz

j = $ ((i + 12))

printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {horas [i]} $ j $ {horas [j]} feito

printf "\ nArquivos totais =% d \ n" $ count


O script consiste em uma função (uso) e um corpo principal com quatro seções. Na primeira seção, verificamos se há um argumento de linha de comando e se é um diretório. Se não estiver, exibimos a mensagem de uso e saímos.

A segunda seção inicializa o array horas. Ele faz isso atribuindo a cada elemento um valor zero. Não há nenhum requisito especial para preparar arrays antes do uso, mas nosso script precisa garantir que nenhum elemento esteja vazio. Observe a maneira interessante como o loop é construído. Ao empregar a expansão da cinta ({0..23}), somos capazes de gerar facilmente uma sequência de palavras para o para comando.

A próxima seção reúne os dados executando o estado programa em cada arquivo no diretório. Nós usamos corte para extrair a hora de dois dígitos do resultado. Dentro do loop, precisamos remover os zeros à esquerda do campo da hora, uma vez que o shell tentará (e, no final das contas, falhará) interpretar os valores de “00” a “09” como números octais (consulte a Tabela 34-2). Em seguida, incrementamos o valor do elemento da matriz correspondente à hora do dia. Finalmente, aumentamos um contador (contar) para rastrear o número total de arquivos no diretório.

A última seção do script exibe o conteúdo da matriz. Primeiro exibimos algumas linhas de cabeçalho e, em seguida, inserimos um loop que produz quatro colunas de saída. Por último, geramos a contagem final dos arquivos.


Top OS Cloud Computing na OnWorks: