Сценарії Bash – масив

Сценарії Bash – масив

Масиви є важливими поняттями в програмуванні або написанні сценаріїв. Масиви дозволяють нам зберігати та отримувати елементи у формі списку, який можна використовувати для певних завдань. У bash також є масиви, які допомагають нам створювати сценарії в командному рядку для зберігання даних у форматі списку. У цій статті ми розберемося з основами масивів у сценаріях bash.

Створення масивів

Щоб створити базовий масив у сценарії bash, ми можемо використати declare після назви змінної масиву, яку ви хочете надати.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) 

АБО

#!/bin/usr/env bash sport[0]=football sport[1]=cricket sport[2]=hockey sport[3]=basketball 

Значенням елементів може бути будь-яке ціле число, рядки або будь-яка інша форма даних за бажанням. Ми бачимо, що масив оголошується в сценарії bash двома способами: перший здається більш зручним і менш важким для оголошення. Якщо ми хочемо оголосити масив за один раз, перше є оптимальним вибором, але якщо елементи потрібно додавати по частинах, останнє є хорошим вибором.

Друк масивів

Після оголошення масиву, якщо ми хочемо відобразити всі елементи в масиві, ми можемо використовувати символ @.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' 

echo '${array_name[@]}' 

Ми використовуємо [@] як індекс масиву для відображення всіх елементів. Усі елементи друкуються через пробіл. Лапки навколо змінної розгортаються та друкують усі елементи в масиві.

Ітерація по масиву

Щоб перебирати масив по одному елементу за раз, ми можемо використовувати цикли та виконувати будь-які операції в його тілі.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) for i in ${nums[@]} do echo -e '$i 
' done 

Як ми бачимо, ми використали цикл for для друку елементів із масиву по одному. У попередньому розділі ми використовували трюк, щоб отримати всі елементи масиву та перейти до нього один за одним у циклі for. ${array_name[@]} розширюється на всі елементи в масиві, а цикл for ітерує їх один за одним з ітератором у прикладі, це змінна i , всередині тіла циклу for ми друкуємо змінна/ітератор i і, таким чином, перебирати масив.

Отримайте кількість елементів у масиві

Щоб отримати кількість елементів масиву, ми можемо використати оператор # перед іменем масиву в ${array_name[@]}.

 #!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${#sport[@]}' 

Таким чином ми повертаємо розмір масиву за допомогою команди ${#sport[@]}, # використовується для отримання розміру змінної поруч із ним, за допомогою подвійних лапок оцінюється значення команди, і ми отримуємо необхідну кількість елементів у масиві.

Вставка елемента в масив

Щоб вставити елемент, нам потрібно встановити відповідний індекс елемента, а потім значення елемента, яке ви хотіли надати.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport[4]='dodgeball' sport[2]='golf' echo '${sport[@]}' 

Ми додали 5-й елемент (4-й індекс) до масиву, а також змінили/відредагували 3-й елемент масиву (2-й індекс). The назва масиву[індекс]=значення це всі трюки для додавання, зміни або ініціалізації елементів масиву.

Ми також можемо додати елементи до масиву за допомогою оператора +=.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) echo '${sport[@]}' sport+=('golf' 'baseball') echo '${sport[@]}' echo 'Size : ${#sport[@]}' 

Як видно з прикладу, ми можемо додати кілька елементів до масиву за допомогою мінімального коду. Ми використовуємо array_name+=(elements), щоб додати елементи до масиву.

Видалення елемента з масиву

Щоб видалити елемент із масиву, можна скористатися командою unset. Команда приймає ім’я змінної, у нашому випадку ім’я масиву та індекс цього елемента. Індекс також може бути відносним, тобто -1 вказує на останній елемент і -2 на передостанній і так далі.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[1] echo '${sport[@]}' echo '${#sport[@]}' 

Як ми бачимо, unset arrayname[index] видалить елемент за індексом з масиву. Крім того, розмір масиву було зменшено до 3 з 4, що вказує на те, що елемент повністю видалено, а не просто замінено пробілами.

Використання відносних індексів

Якщо ми використовуємо такі індекси, як -1, -2 тощо, елементи посилаються з останнього елемента, і, отже, ми можемо видаляти або змінювати їх із відносним упорядкуванням також із зворотного боку.

#!/bin/usr/env bash declare -a sport=( [0]=football [1]=cricket [2]=hockey [3]=basketball ) unset sport[-3] echo '${sport[@]}' 

Як ми бачимо, індекс 1 також посилається як -3 ззаду, і тому посилатися на певні елементи у великому масиві стає відносно легше.

З’єднання масиву

Ми можемо з’єднати (вилучити зілля) масив, щоб отримати assign або надрукувати його в іншій змінній/масиву.

#!/bin/usr/env bash declare -a sport sport+=('football' 'cricket' 'hockey' 'basketball') sport+=('golf' 'baseball') echo 'sport = ${sport[@]}' arr='${sport[@]:1:3}' echo 'arr = ${arr[@]}' 

Ми вилучили фрагмент із спортивного масиву, тобто елемент між індексами 1 і 3 включно, і призначили його змінній arr, яка також є масивом. Оператор @ отримує всі елементи з масиву, а потім ми можемо з’єднати масив між індексами 1 і 3, щоб у нас були елементи 1, 2 і 3 (крикет, хокей і бейсбол) із спортивного масиву.

Визначте статичний масив і виведіть елементи масиву

#To declare static Array programmingArray=(Java Python Ruby Perl) #In below 2 ways we can print the elements of the static array echo 'Way 1 of printing static values by using [@]:0 - ' ${programmingarray[@]$ echo 'Way 2 of printing static values by using [*]:0 - ' ${programmingarray[*]$ 

Двома способами ми можемо друкувати елементи статичного масиву

Виконання програми

sh So, we can give as sh arraycheck2.sh # arraycheck2.sh is the name of the script file here 

Передача аргументів командного рядка у файл сценарію

#All the array elements are stored in an array called programmingArray programmingArray=('$@') #Index values start from 0 #If we do not specify the index, it will take up the size of first index value echo 'Size of programmingArray at 0th location..:' $(#programmingArray[0]} echo 'Size of programmingArray at 1st location..:' $(#programmingArray[1]} 

Наведений вище сценарій можна виконати як

# Тут Java, Python і Ruby є аргументами командного рядка

sh arrayCheck.sh Java Python Ruby 

Етапи виконання скрипта:

programmingArray=(Java Python Ruby)

#Java буде присутня в 0-му індексі, його розмір можна обчислити наведеним нижче способом

${#programmingArray[0]}

Подібним чином, Python буде присутній у 1-му індексі, його розмір можна обчислити наступним чином

${#programmingArray[1]}

Вихід:

Ітерація значень масиву за допомогою циклу for

$@ надасть усі значення, передані через аргументи командного рядка, і збережеться в масиві.

Його можна повторити за допомогою циклу for

declare -a programmingArray=('$@') i=0 for programming in '$@' do echo 'Array value at index ' $i ' : ' $programming i=$((i+1)); done 

Вихід:

Давайте швидко розглянемо, що означає кожен символ

Синтаксис

Вихід
arr=()

arr[0]=3 Перезаписати 1-й елемент

arr+=(4) Додавання значень

str=$(ls) Зберегти вихід ls як рядок

arr=( $(ls) ) Зберегти результат ls як масив файлів

${arr[@]:s:n} Отримати n елементів, починаючи з індексу

#Ми можемо надати набір значень

подобається це

arr=(один два три)

Щоб ініціалізувати масив
${arr[0]} Щоб отримати перший елемент. Індекс завжди починається з 0
${arr[@]} Щоб отримати всі елементи, після чого ми можемо виконувати цикл
${!arr[@]} Для отримання тільки індексів масиву
${#arr[@]} Щоб обчислити розмір масиву
arr[2]=3 Щоб перезаписати 3-й елемент, нам потрібно використовувати його таким чином. Оскільки індекс починається з 0, arr[2] правильний.
приб.+=(40) Щоб додати значення(-я), ми можемо використовувати +, а потім призначити =, отже використовується +=.
str=$(ls) Щоб зберегти вихідні дані команди ls як рядок (для цього виведення показано приклад 4)
arr=( $(ls) ) Щоб зберегти вивід ls як масив файлів (для цього виводу показано приклад 5)
${arr[@]:s:n} Щоб отримати n елементів, починаючи з індексу s