- •Лабораторные работы Лабораторная работа №1. Файловая оболочка Midnight Commander
- •Лабораторная работа №2. Информационные команды оболочки, работа со справочной системой
- •Лабораторная работа №3. Управление каталогами
- •Лабораторная работа №4. Файловые операции
- •Лабораторная работа №5. Права доступа к файлам
- •Лабораторная работа №6. Организация поиска
- •Лабораторная работа №7. Регулярные выражения. Команда egrep
- •Лабораторная работа №8. Перенаправление стандартных потоков, конвейеры
- •Лабораторная работа №9. Фильтры, обработка текстовых данных
- •Лабораторная работа №10. Архивирование и сжатие
- •Лабораторная работа №11. Текстовый редактор Vim
- •Vim [ключи] [файл].
- •Лабораторная работа №12. Сценарии оболочки
- •Лабораторная работа №13. Условные конструкции
- •Лабораторная работа №14. Циклические конструкции
- •Лабораторная работа №15. Одномерные массивы
- •Лабораторная работа №16. Потоковый редактор sed
- •Лабораторная работа №17. Язык обработки шаблонов gawk
- •If (условие) {действия1} [else {действия2}].
Лабораторная работа №15. Одномерные массивы
Цель работы: освоить принципы работы с одномерными массивами.
Необходимые сведения
Использование одномерных массивов в bash имеет особенности:
нумерация индексов по умолчанию начинается с 0;
нет ограничения на максимальное значение индекса;
не требуется, чтобы список индексов был непрерывным;
любая переменная оболочки может быть использована как массив.
Массив создается автоматически, если используется синтаксис
name[index]=value,
где index может быть арифметическим выражением, возвращающим целое значение большее или равное 0.
Массив также может быть создан с помощью конструкции вида
name=(value1 value2 … valueN),
где каждая величина value имеет вид [index=]string. Часть index= является необязательной; если она отсутствует, то создается элемент массива с индексом предыдущего элемента плюс один. Например, возможно объявление массива
z=(abc 12 [10]=$LOGNAME 34).
При этом нулевому элементу массива z будет присвоено значение abc, первому — значение 12, десятому — имя текущего пользователя, одиннадцатому — значение 34.
Обращение к элементу массива имеет вид ${name[index]}. Если в качестве index указать символ *, то результатом будет текстовая строка, состоящая из всех значений массива, разделенных первым символом переменной IFS. Указание вида ${#name[index]} позволяет обратиться к длине элемента name[index]. Указание вида ${#name[*]} позволяет обратиться к количеству инициализированных элементов массива.
Для удаления некоторого элемента массива применяется команда unset. Для удаления конкретного элемента можно использовать команду unset name[index], а для удаления всего массива — unset name или unset name[*].
Ход работы
Создайте сценарий myscript_arr, в котором формируются:
массив a из 10 элементов, содержащий числа от 0 до 9. Индексы должны начинаться с 30. Массив объявить явно;
массив b из 20 элементов, содержащий числа от 10 до 29. Для формирования массива используйте цикл for;
массив f, в котором содержатся имена не скрытых файлов и каталогов домашнего каталога;
массив d, содержащий только имена подкаталогов домашнего каталога. (Указание. Используйте команду ls –D, выполните подсчет количества пробелов в результате выполнения этой команды, осуществите последующий разбор на отбельные значения при помощи команды cut).
Добавьте в сценарий команды, выполняющие следующее:
используя цикл for, выведите на экран массив a, в виде
a[30]=0
a[31]=1
…
используя цикл while, выведите на экран массив b в обратном порядке индексов;
используя цикл until, выведите на экран массивы f и d.
Добавьте в сценарий команды для вывода на экран информации о каждом массиве в виде
количество элементов массива: 10
Добавьте в сценарий команды для поиска в массивах f и d индексов элементов с максимальной длиной (или индекс одного из таких элементов).
Добавьте в сценарий команды для удаления каждого второго элемента массива b. Проверьте результат.