Если какой-то кодер не поклоняется массивам, то вряд ли он хороший. :) Bash - это язык программирования оболочки, поэтому при кодировании Bash вам понадобятся массивы. В этой статье я кратко расскажу о логике работы с массивами в bash-скриптах. Мы будем рассматривать одномерные индексированные массивы и ассоциативные массивы (пары ключ, значение).
В математике массив относится к набору чисел или объектов, которые будут следовать определенному шаблону. Массив — это упорядоченное расположение (часто в строках, столбцах или матрице), которое чаще всего используется в качестве визуального инструмента для демонстрации умножения и деления. Массивы используются для ввода больших объемов данных в компьютер, их быстрой обработки и надлежащего хранения.
Является ли массив в программировании аналогом матрицы в математике? Да, особенно если вы допускаете двумерные массивы. Существует два типа массивов bash:
- Индексированные массивы.к массиву относятся целые числа или числа.
- Ассоциативные массивы.на массив ссылаются через строки или набор символов и слов.
В других продвинутых языках есть дополнительные многомерные массивы. Но помните, что bash не поддерживает многомерные массивы, поэтому невозможно добавить массив внутри массива.
Индексированный массив
Есть несколько способов объявить индексированные массивы в Bash. Между тем, стоит знать, что размер массива не нуждается в объявлении и начинается с 0 (нуля).
arr=() #arr is an empty array.
Это создает пустую команду массива.
arr=("Batur" "Orkun" "DevOps") arr=([0]="Batur" [1]="Orkun" [2]="DevOps")
Это создает команду, заполненную массивом данных. Как вам угодно, вы можете использовать индексы или нет.
arr=([1]="Batur" [0]="Orkun" [4]="DevOps")
Следовать за номерами индексов по порядку не нужно, и вы можете передать некоторые индексы, подобные приведенным выше.
echo ${arr[0]} # Output: Orkun
Если вы хотите изменить значения, вы можете сделать это, как показано ниже.
arr[0]="New Surname"
Если вы хотите напечатать все значения, вам нужен символ «@». Обратите внимание, что важны индексы, а не порядок.
arr=([1]="Batur" [0]="Orkun" [4]="DevOps") echo ${arr[@]}. # Output: Orkun Batur DevOps
Если вы любите придерживаться правил, используйте оператор «declare» для определения вашего массива. Но это не обязательно.
declare -a Arr Arr=("Batur" "Orkun" "DevOps")
Давайте сделаем пример с циклом for.
#!/usr/bin/env bash declare -a Arr=("Batur" "Orkun" "DevOPS") for item in ${Arr[@]}; do echo "> $item" done ### Output: # > Batur # > Orkun # > DevOPS
Если вы хотите добавить новый элемент в массив, используйте оператор «+=».
declare -a Arr=("Batur" "Orkun" "DevOPS") Arr+=("Hello") for item in ${Arr[@]}; do echo "> $item" done ### Output: # > Batur # > Orkun # > DevOPS # > HEYYY
Ассоциативный массив
В то время как индексированные массивы не требуют объявления («declare»), ассоциативные массивы требуют.
declare -A AssocArr declare -A AssocArr=( [name]="batur" [surname]="Orkun" [title]="DevOps" )
Вы никогда не должны использовать символ «@» для печати всего, потому что порядок может быть другим. Например, для приведенного выше массива я вывел «Orkun DevOPS batur».
Если вы хотите изменить значения:
AssocArr[name]="BATUR"
Если вы хотите добавить новый элемент в массив, используйте оператор «+=».
AssocArr+=([os]="Linux"
Возможны множественные.
AssocArr+=([os]="Linux" [skill]="Kubernetes")
Если вы хотите удалить элемент из массива, используйте команду «unset».
unset AssocArr[name]
Вы также можете использовать циклы с массивами.
declare -A AssocArr=([name]="batur" [surname]="Orkun" [title]="DevOPS") AssocArr+=([os]="Linux") AssocArr+=([os]="Linux" [skill]="Kubernetes") for key in ${!AssocArr[@]}; do echo "$key : ${AssocArr[$key]}" done ### Output: # surname : Orkun # title : DevOPS # skill : Kubernetes # os : Linux # name : batur
Дополнительное использование
Массивы часто являются идеальной структурой данных для создания и управления.
Скрипт, который обнаруживает файлы и каталоги в текущем каталоге и записывает их на экран.
list=( $(ls) ) for item in ${list[@]}; do if [ -d "../$item" ]; then echo "Directory $item" else echo "File $item" fi done
Чтобы извлечь часть массива, вы можете использовать синтаксис, который:
${Арр[1]:s:n}
Этот синтаксис вернет часть массива, начинающуюся с позиции «s» и содержащую «n» элементов. Вы можете опустить часть «:n», чтобы извлечь все элементы из s до конца списка.
declare -a Arr=("Batur" "Orkun" "DevOPS") echo ${Arr[1]:1:3} ### Output: # rku
Для поиска и замены в массиве элементов вы можете использовать следующий синтаксис:
${Арр[1]/найти/заменить}
Этот синтаксис на самом деле является регулярным выражением (Regular Expression). Найдите первое ключевое слово и замените его вторым ключевым словом.
declare -a Arr=("Batur" "Orkun" "DevOPS") echo ${Arr[1]/kun/-KUN} ### Output: # Or-KUN
Заключение
Массивы в Bash могут иметь ограничения, но они предлагают ту же базовую функциональность, что и большинство языков программирования. Важно использовать последнюю версию Bash. Например, до версии 4 не было поддержки ассоциативных массивов. Однако Bash есть везде и является сильным языком программирования. Так что вы можете использовать его везде. Знание Bash — важный навык, независимо от того, являетесь ли вы разработчиком или занимаетесь DevOps.