Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Доступ к элементам массива

Итак, для чего нужны массивы? Подобно тому, как многие задачи по управлению данными могут быть выполнены с помощью программы для работы с электронными таблицами, многие задачи программирования могут быть выполнены с помощью массивов.

Рассмотрим простой пример сбора и представления данных. Мы создадим сценарий, который проверяет время модификации файлов в указанном каталоге. На основе этих данных наш скрипт выведет таблицу, показывающую, в какой час дня файлы были в последний раз изменены. Такой сценарий можно использовать, чтобы определить, когда система наиболее активна. Этот сценарий называется часов, дает такой результат:


изображение

[я @ linuxbox ~] $ часов.


час

Файлы

час

Файлы

----

-----

----

-----

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

Всего файлов = 80


Мы выполняем часов программа, указав текущий каталог в качестве цели. Он создает таблицу, показывающую для каждого часа дня (0–23), сколько файлов было изменено в последний раз. Код для его создания выглядит следующим образом:



#! / Bin / Баш

# hours: скрипт для подсчета файлов по времени модификации () {

echo "использование: каталог $ {0 ## * /}"> & 2

}

#! / Bin / Баш

# hours: скрипт для подсчета файлов по времени модификации () {

echo "использование: каталог $ {0 ## * /}"> & 2

}


# Убедитесь, что аргумент - это каталог, если [[! -d $ 1]]; тогда

выход использования 1

fi


# Инициализировать массив

для i в {0..23}; делать часы [я] = 0; сделано


# Собирать информацию

для i в $ (stat -c% y "$ 1" / * | cut -c 12-13); сделать j = $ {i / # 0}

((++ часов [j])) ((++ count))

сделанный


# Данные дисплея

echo -e "Час \ tFiles \ tHour \ tFiles" echo -e "---- \ t ----- \ t ---- \ t -----" для i в {0..11} ; делать

j = $ ((i + 12))

printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {hours [i]} $ j $ {hours [j]} готово

printf "\ nTotal files =% d \ n" $ count

# Убедитесь, что аргумент - это каталог, если [[! -d $ 1]]; тогда

выход использования 1

fi


# Инициализировать массив

для i в {0..23}; делать часы [я] = 0; сделано


# Собирать информацию

для i в $ (stat -c% y "$ 1" / * | cut -c 12-13); сделать j = $ {i / # 0}

((++ часов [j])) ((++ count))

сделанный


# Данные дисплея

echo -e "Час \ tFiles \ tHour \ tFiles" echo -e "---- \ t ----- \ t ---- \ t -----" для i в {0..11} ; делать

j = $ ((i + 12))

printf "% 02d \ t% d \ t% 02d \ t% d \ n" $ i $ {hours [i]} $ j $ {hours [j]} готово

printf "\ nTotal files =% d \ n" $ count


Скрипт состоит из одной функции (пользования) и основной корпус с четырьмя секциями. В первом разделе мы проверяем, есть ли аргумент командной строки и что это каталог. Если это не так, мы отображаем сообщение об использовании и выходим.

Второй раздел инициализирует массив часов. Он делает это, присваивая каждому элементу нулевое значение. Специальных требований для подготовки массивов перед использованием нет, но наш скрипт должен гарантировать, что ни один элемент не будет пустым. Обратите внимание на интересный способ построения цикла. Используя раскладку скобок ({0..23}), мы можем легко составить последовательность слов для для команда.

В следующем разделе собираются данные путем запуска состояние программу для каждого файла в каталоге. Мы используем вырезать чтобы извлечь из результата двузначный час. Внутри цикла нам нужно удалить ведущие нули из поля часа, поскольку оболочка попытается (и в конечном итоге потерпит неудачу) интерпретировать значения от «00» до «09» как восьмеричные числа (см. Таблицу 34-2). Затем мы увеличиваем значение элемента массива, соответствующего часу дня. Наконец, мы увеличиваем счетчик (считать) для отслеживания общего количества файлов в каталоге.

Последний раздел скрипта отображает содержимое массива. Сначала мы выводим пару строк заголовка, а затем входим в цикл, который производит четыре столбца вывода. Наконец, мы выводим окончательное количество файлов.


Лучшие облачные вычисления для ОС в OnWorks: