Сценарії 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 |