Масиви в Shell Scripts

Масиви в Shell Scripts

Масивите в Shell scripts са структури от данни, които ви позволяват да съхранявате множество стойности в една променлива и да им осъществявате достъп чрез техния индекс. Те са ценен инструмент за организиране и обработка на големи количества данни и са широко използвани в скриптовете на обвивката за решаване на различни задачи.

Масивите в Shell scripts не са вградени типове данни, а са създадени от потребителя като списък от елементи, разделени със специален разделител по ваш избор. Въпреки че е често срещано да се използва интервал като разделител, използването на друг разделител като запетая, точка и запетая или нов ред може да бъде полезно за някои случаи.

Създаване на масив

За да създадете масив, просто задайте променлива на shell на списък от стойности, разделени с избрания от вас разделител. Например:


myArray=(1 2 3 4 5)

В този пример създадохме масив myArray с пет елемента: 1, 2, 3, 4 и 5. Елементите могат да бъдат от всякакъв тип данни, поддържани от shell, включително цели числа, действителни числа, низове и дори други масиви.

Достъп до елементи на масив

За да осъществите достъп до елемент от масив, използвайте името на масива, последвано от индекса на елемента в квадратни скоби. Индексът на първия елемент на масива е 0, а на последния елемент е размерът на масива минус 1.

  Каква е разликата между примери за данни и информация?

Например, следният скрипт отпечатва първия и последния елемент на myArray:


echo ${myArray[0]}
echo ${myArray[$((${#myArray[@]} - 1))]}

Обърнете внимание, че можем да използваме специалната променлива $# за получаване на размера на масива.

Итериране през масив

За да итерирате през масив и да обработите всеки елемент, можете да използвате цикъл for или while. Цикълът for е най-често използваният метод и приема следния синтаксис:


for element in ${myArray[@]}
do

Обработка на елемента

done

В този пример цикълът ще итерира през всеки елемент в myArray и ще зададе променливата element на текущия елемент. Можете да обработвате елемента, както пожелаете, в блока на цикъла.

Модифициране на масив

Можете да модифицирате съществуващ масив, като зададете нова стойност на всеки от неговите елементи. За да зададете стойността на конкретен елемент, просто използвайте синтаксиса за достъп до елемент, последван от знак за равенство и новата стойност:


myArray[0]=100

Този скрипт ще зададе първия елемент на myArray на 100. Също така можете да добавяте и премахвате елементи от масив с помощта на вградените команди += и -=.

Пример на използване на масив

Ето примерен скрипт на обвивката, който използва масив, за да съхранява списък с имена и да ги разпечатва в обратен ред:


names=("John" "Mary" "Bob" "Alice" "Tom")

for i in $(seq $((${#names[@]} - 1)) -1 0)
do
echo ${names[$i]}
done

Този скрипт създава масив names със списък с имена и след това използва цикъл, за да итерира през масива в обратен ред, като използва цифрова променлива за изчисляване на индекса.

Заключение

Масивите са мощна функция в Shell scripts, която ви позволява да съхранявате и управлявате множество стойности в един обект. Те са особено полезни за организиране и обработка на данни в сложни скриптове на обвивката.

Разбирането на различните аспекти на масивите, включително тяхното създаване, достъп и модифициране, е от решаващо значение за ефективното им използване. Освен това, практикуването на работа с масиви и използването на примери за скриптове може значително да подобри вашите умения за програмиране на обвивка.

Често задавани въпроси

1. Как да създам масив с динамичен размер?

Не можете директно да създадете масив с динамичен размер в Shell scripts. Въпреки това можете да използвате променливи на shell с разширяваща се дължина, като declare -a, за да симулирате динамично разпределен масив.

2. Как мога да сортирам масив?

Можете да използвате вградения инструмент за сортиране sort за сортиране на масив в Shell scripts. Например:


sortedArray=($(sort <<<"${myArray[@]}"))

3. Как да копирам елементи от един масив в друг?

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


newArray=("${myArray[@]}")

4. Как да обединя два масива?

Можете да използвате оператора += за обединяване на два масива. Например:


mergedArray=("${myArray[@]}" "${anotherArray[@]}")

5. Как да извлекам уникални елементи от масив?

Можете да използвате вградената команда uniq за извличане на уникални елементи от масив. Например:


uniqueArray=($(uniq <<<"${myArray[@]}"))

6. Как да обърна реда на елементите в масив?

Можете да използвате вградения инструмент за обръщане rev за обръщане на реда на елементите в масив. Например:


reversedArray=($(rev <<<"${myArray[@]}"))

7. Как да проверя дали елемент съществува в масив?

Можете да използвате вградената команда in, за да проверите дали елемент съществува в масив. Например:


if [[ ${myArray[*]} =~ "element" ]]; then

Елементът съществува

fi

8. Как да изтрия елемент от масив?

Можете да използвате вградената команда unset за изтриване на елемент от масив. Например:


unset myArray[$index]

9. Как да получа индекса на елемент в масив?

Можете да използвате вградената команда echo с опцията -n за получаване на индекса на елемент в масив. Например:


index=$(echo ${myArray[*]} | tr " " "\n" | grep -n "element" | cut -d: -f1)

10. Как мога да преобразувам масив в низ?

Можете да използвате вградената команда join за преобразуване на масив в низ. Например:


string=$(join " " "${myArray[@]}")