Цель работы: освоить принципы работы с одномерными массивами.
Использование одномерных массивов в 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[*].
1. Создайте сценарий myscript_arr, в котором формируются:
— массив a из 10 элементов, содержащий числа от 0 до 9. Индексы должны начинаться с 30. Массив объявить явно;
— массив b из 20 элементов, содержащий числа от 10 до 29. Для формирования массива используйте цикл for;
— массив f, в котором содержатся имена не скрытых файлов и каталогов домашнего каталога;
— массив d, содержащий только имена подкаталогов домашнего каталога. (Указание. Используйте команду ls –D, выполните подсчет количества пробелов в результате выполнения этой команды, осуществите последующий разбор на отбельные значения при помощи команды cut).
2. Добавьте в сценарий команды, выполняющие следующее:
— используя цикл for, выведите на экран массив a, в виде
a[30]=0
a[31]=1
…
— используя цикл while, выведите на экран массив b в обратном порядке индексов;
— используя цикл until, выведите на экран массивы f и d.
3. Добавьте в сценарий команды для вывода на экран информации о каждом массиве в виде
количество элементов массива: 10
4. Добавьте в сценарий команды для поиска в массивах f и d индексов элементов с максимальной длиной (или индекс одного из таких элементов).
5. Добавьте в сценарий команды для удаления каждого второго элемента массива b. Проверьте результат.