Онлайн робочі станції OnWorks Linux та Windows

логотип

Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

Доступ до елементів масиву

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

Давайте розглянемо простий приклад збору та представлення даних. Ми створимо сценарій, який перевірить час модифікації файлів у вказаному каталозі. На основі цих даних наш скрипт виведе таблицю, яка показує, в яку годину дня файли були востаннє змінені. Такий сценарій можна використовувати для визначення, коли система найбільш активна. Цей сценарій, названий годин, дає такий результат:


зображення

[me@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), скільки файлів було востаннє змінено. Код для створення цього виглядає наступним чином:



#! / бін / баш

# годин: скрипт для підрахунку файлів за часом модифікації () {

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

}

#! / бін / баш

# годин: скрипт для підрахунку файлів за часом модифікації () {

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

}


# Перевірте, чи є аргумент каталогом, якщо [[ ! -d $1 ]]; тоді

вихід із використання 1

fi


# Ініціалізація масиву

для i в {0..23}; робити годин[i]=0; зроблено


# Збирайте дані

для i в $(stat -c %y "$1"/* | cut -c 12-13); зробити j=${i/#0}

((++години[j])) ((++рахунок))

зроблений


# Відображення даних

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 "\nУсього файлів = %d\n" $кол

# Перевірте, чи є аргумент каталогом, якщо [[ ! -d $1 ]]; тоді

вихід із використання 1

fi


# Ініціалізація масиву

для i в {0..23}; робити годин[i]=0; зроблено


# Збирайте дані

для i в $(stat -c %y "$1"/* | cut -c 12-13); зробити j=${i/#0}

((++години[j])) ((++рахунок))

зроблений


# Відображення даних

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 "\nУсього файлів = %d\n" $кол


Сценарій складається з однієї функції (використання) і основний корпус із чотирма секціями. У першому розділі ми перевіряємо, чи є аргумент командного рядка і що це каталог. Якщо це не так, ми відображаємо повідомлення про використання та виходимо.

Другий розділ ініціалізує масив годин. Він робить це, призначаючи кожному елементу значення нуль. Немає особливих вимог до підготовки масивів перед використанням, але наш сценарій повинен переконатися, що жоден елемент не є порожнім. Зверніть увагу на цікавий спосіб побудови циклу. За допомогою розширення дужки ({0..23}), ми можемо легко створити послідовність слів для та цінності команда

Наступний розділ збирає дані, запустивши файл stat програму для кожного файлу в каталозі. Ми використовуємо вирізати щоб витягти з результату двозначну годину. Усередині циклу нам потрібно видалити провідні нулі з поля годин, оскільки оболонка намагатиметься (і в кінцевому підсумку не зможе) інтерпретувати значення від «00» до «09» як вісімкові числа (див. таблицю 34-2). Далі ми збільшуємо значення елемента масиву, що відповідає годині доби. Нарешті, ми збільшуємо лічильник (вважати), щоб відстежувати загальну кількість файлів у каталозі.

Останній розділ сценарію відображає вміст масиву. Спочатку ми виводимо пару рядків заголовка, а потім вводимо цикл, який створює чотири стовпці. Нарешті, ми виводимо остаточний підсумок файлів.


Найпопулярніші хмарні обчислення ОС на OnWorks: