Введение
Умение работать с массивами в скриптах оболочки поможет вам эффективно работать с большими наборами данных. Но что такое массивы и как их создать? Давайте разберёмся.
Что такое массивы?
Если у вас уже есть базовые знания любого языка программирования, вы знаете, что такое массивы. Но для тех, кто ещё не знаком, давайте рассмотрим основы массивов и научимся работать с ними.
Переменные хранят отдельные элементы данных. Массивы же, напротив, могут хранить практически неограниченное количество элементов данных. При работе с большими объёмами данных переменные могут быть очень неэффективны, поэтому использование массивов может быть очень полезным.
Давайте научимся создавать массивы в скриптах оболочки.
Создание массивов в скриптах оболочки
Есть два типа массивов, с которыми мы можем работать в скриптах оболочки.
- Индексированные массивы – хранят элементы с индексом, начинающимся с 0.
- Ассоциативные массивы — хранят элементы в парах ключ-значение
Создаваемый по умолчанию массив является индексированным. Если указать имена индексов, он станет ассоциативным, и к элементам можно будет обращаться по именам индексов вместо номеров.
Объявление массивов:
root@ubuntu:~# declare -A assoc_array
root@ubuntu:~# assoc_array[key]=value
OR
root@ubuntu:~# declare -a indexed_array
root@ubuntu:~# indexed_array[0]=valueОбратите внимание на заглавную и строчную букву «a». Заглавная буква «A» используется для объявления ассоциативного массива, а строчная — для объявления индексированного массива.
Ключевое слово describe используется для явного объявления массивов, но на самом деле его использование не является обязательным. При создании массива вы можете просто инициализировать значения в соответствии с нужным типом массива, не объявляя массивы явно.
Работа с массивами в скриптах оболочки
Теперь, когда вы знаете, как создать массив, давайте научимся работать с массивами. Поскольку это коллекции элементов данных, мы можем одновременно работать с циклами и массивами, чтобы извлекать необходимые точки данных.
1. Доступ к элементам массива по отдельности
Поскольку мы знаем, что каждая точка данных индексируется индивидуально, мы можем получить доступ ко всем элементам массива, указав индекс массива, как показано ниже:
assoc_array[element1]="Hello World"
echo ${assoc_array[element1]}Аналогично, давайте получим доступ к некоторым элементам индексированного массива. Мы можем указать все элементы индексированного массива, разделив их пробелами, поскольку индекс автоматически генерируется для каждого из этих элементов.
index_array=(1 2 3 4 5 6)
echo ${index_array[0]}Как видите, первый элемент автоматически печатается под индексом 0.
2. Последовательное чтение элементов массива
Если вы уже знакомы с циклами, это будет легко. Если нет, мы рассмотрим их в следующем уроке. Мы будем использовать циклы while и for в скриптах оболочки для работы с элементами массива. Скопируйте следующий скрипт и сохраните его как Сохранить .sh
#!/bin/bash
index_array=(1 2 3 4 5 6 7 8 9 0)
for i in ${index_array[@]}
do
echo $i
doneПриведенный выше скрипт будет иметь следующий вывод:
Возможно, вы заметили index_array[@], и если вам интересно, для чего нужен символ @, мы рассмотрим это прямо сейчас.
Встроенные операции для массивов в скриптах оболочки
Теперь, когда вы узнали, как получать доступ к элементам по отдельности и использовать циклы, давайте изучим различные операции, которые доступны по умолчанию для массивов.
1. Доступ ко всем элементам массива
Мы научились получать доступ к элементам, используя индекс или ключ массива. Но если мы хотим вывести все элементы сразу или работать со всеми элементами, мы можем использовать другой оператор — знак [@].
Как вы заметили в примере выше, я использовал этот символ, когда хотел перебрать все элементы массива с помощью цикла for.
echo ${assoc_array[@]}Приведенный выше код выводит все элементы, хранящиеся в массиве assoc.
2. Подсчитать количество элементов в массиве
Подобно символу @, указанному выше, у нас есть символ #, который можно добавить к имени массива, чтобы получить количество элементов, хранящихся в нём. Давайте посмотрим, как это работает.
echo ${#index_array[@]}Если вы хотите подсчитать количество символов, использованных для определенного элемента, мы можем просто заменить знак @ на индекс.
3. Удалить отдельные элементы массива
Мы умеем добавлять элементы массива и выводить их на экран. Давайте научимся удалять отдельные элементы. Для этого мы используем ключевое слово unset.
unset index_array[1]Замените имя массива и идентификатор индекса в примере кода выше, и вы удалите нужный элемент массива. Довольно просто, правда?
Результат
Скрипты оболочки очень обширны и могут заменить любую функцию, выполняемую в терминале, на функцию, написанную соответствующим человеком. Среди дополнительных возможностей массивов в скриптах оболочки — работа с регулярными выражениями (regex). Мы можем использовать различные регулярные выражения для управления элементами массивов в скриптах оболочки.
Надеемся, что к настоящему моменту вы уже хорошо разобрались в создании и работе с массивами и можете использовать их в своих скриптах. Оставьте комментарий ниже, чтобы поделиться своими мыслями, и сообщите нам, если у вас есть вопросы по этой теме.












