Поиск по сайту:

Массивы в сценариях оболочки


Знание того, как работать с массивами в сценариях оболочки, поможет вам работать с большими наборами данных гораздо эффективнее. Но что такое массивы и как их создавать? Давай выясним!

Что такое массивы?

Если у вас уже есть базовые знания любого языка программирования, вы знаете, что такое массивы. Но для непосвященных давайте рассмотрим основы массивов и научимся с ними работать.

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

Давайте узнаем, как создавать массивы в сценариях оболочки.

Создание массивов в сценариях оболочки

Есть два типа массивов, с которыми мы можем работать в сценариях оболочки.

  • Индексированные массивы. Храните элементы с индексом, начинающимся с 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 в нижнем регистре используется для объявления индексированного массива.

Ключевое слово declare используется для явного объявления массивов, но на самом деле вам не нужно их использовать. Когда вы создаете массив, вы можете просто инициализировать значения на основе типа массива, который вы хотите, без явного объявления массивов.

Работа с массивами в сценариях оболочки

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

1. Индивидуальный доступ к элементам массива

Поскольку мы знаем, что каждая точка данных индексируется индивидуально, мы можем получить доступ ко всем элементам массива, указав индекс массива, как показано ниже:

assoc_array[element1]="Hello World"
echo ${assoc_array[element1]}

Точно так же давайте получим доступ к некоторым индексированным элементам массива. Мы можем указать все элементы массива индексов, разделив их пробелами, поскольку индекс автоматически генерируется для каждого из этих элементов.

index_array=(1 2 3 4 5 6)
echo ${index_array[0]}

Как видите, первый элемент автоматически печатается на основе индекса 0.

2. Последовательное чтение элементов массива

Это будет легкой задачей, если вы уже знакомы с циклами for. Если вы этого не сделаете, мы рассмотрим их в следующем уроке. Мы будем использовать циклы 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[@], и если вам интересно, для чего нужен символ @, мы рассмотрим то же самое прямо сейчас.

Встроенные операции для массивов в сценариях оболочки

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

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

Мы научились получать доступ к элементам, предоставляя индекс или ключ массива. Но если мы хотим напечатать все элементы одновременно или работать со всеми элементами, мы можем использовать другой оператор, который является символом [@].

Как вы заметили в приведенном выше примере, я использовал этот символ, когда хотел перебрать все элементы массива с помощью цикла for.

echo ${assoc_array[@]}

Вышеприведенное напечатает все элементы, которые хранятся в массиве assoc.

2. Подсчитайте количество элементов в массиве

Подобно символу @ выше, у нас есть символ #, который может быть префиксом к имени массива, чтобы предоставить нам количество элементов, хранящихся в массиве. Посмотрим, как это работает.

echo ${#index_array[@]}

Если вы хотите подсчитать количество символов, используемых для определенного элемента, мы можем просто заменить символ @ индексом.

3. Удалить отдельные элементы массива

Мы знаем, как добавлять элементы массива и печатать их. Давайте узнаем, как удалять определенные элементы. Для этой цели мы будем использовать ключевое слово unset.

unset index_array[1]

Замените имя массива и идентификатор индекса в приведенном выше примере кода, и вы удалили нужный элемент массива. Довольно просто, не так ли?

Заключение

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

На данный момент мы надеемся, что вы хорошо разбираетесь в создании массивов и работе с ними и сможете использовать массивы в своих сценариях. Прокомментируйте ниже, чтобы сообщить нам, что вы думаете, и если у вас есть какие-либо вопросы по этой теме.