Основы работы с массивами в сценариях оболочки | Комплект 1

Опубликовано: 16 Февраля, 2022

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

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

Как объявить массив в сценариях оболочки?
Мы можем объявить массив в сценарии оболочки по-разному.

1. Indirect Declaration
In Indirect declaration, We assigned a value in a particular index of Array Variable. No need to first declare.

ARRAYNAME[INDEXNR]=value

2. Explicit Declaration
In Explicit Declaration, First We declare array then assigned the values.

declare -a ARRAYNAME

3. Compound Assignment
In Compount Assignment, We declare array with a bunch of values. We can add other values later too.

ARRAYNAME=(value1 value2  .... valueN)

or
[indexnumber=]string

ARRAYNAME=([1]=10 [2]=20 [3]=30)

Чтобы напечатать значение массива в сценарии оболочки?

To Print All elements
[@] & [*] means All elements of Array.

echo ${ARRAYNAME[*]}
#! /bin/bash
 
# To declare static Array 
arr=(prakhar ankit 1 rishabh manish abhinav)
 
# To print all elements of array
echo ${arr[@]}       
echo ${arr[*]}       
echo ${arr[@]:0}    
echo ${arr[*]:0}    

Выход:

прахар анкит 1 ришаб маниш абхинав
прахар анкит 1 ришаб маниш абхинав
прахар анкит 1 ришаб маниш абхинав
прахар анкит 1 ришаб маниш абхинав

To Print first element

# To print first element
echo ${arr[0]}        
echo ${arr}        

Выход:

prakhar
prakhar

To Print Selected index element

echo ${ARRAYNAME[INDEXNR]}
# To print particular element
echo ${arr[3]}        
echo ${arr[1]}        

Выход:

ришаб
анкит

To print elements from a particular index

echo ${ARRAYNAME[WHICH_ELEMENT]:STARTING_INDEX}
# To print elements from a particular index
echo ${arr[@]:0}     
echo ${arr[@]:1}
echo ${arr[@]:2}     
echo ${arr[0]:1}    

Выход:

прахар анкит 1 ришаб маниш абхинав
анкит 1 ришаб маниш абхинав
1 ришаб маниш абхинав
Prakhar

To print elements in range

echo ${ARRAYNAME[WHICH_ELEMENT]:STARTING_INDEX:COUNT_ELEMENT}
# To print elements in range
echo ${arr[@]:1:4}     
echo ${arr[@]:2:3}     
echo ${arr[0]:1:3}    

Выход:

анкит 1 ришаб маниш
1 ришаб маниш
грабить

Чтобы подсчитать длину в массиве

To count the length of a particular element in Array.
Use #(hash) to print length of particular element

# Length of Particular element
echo ${#arr[0]}        
echo ${#arr}        

Выход:

7
7

To count length of Array.

# Size of an Array
echo ${#arr[@]}        
echo ${#arr[*]}        

Выход:

6
6

Для поиска в массиве

arr[@] : All Array Elements.
/Search_using_Regular_Expression/ : Search in Array
Search Returns 1 if it found the pattern else it return zero. It does not alter the original array elements.

# Search in Array
echo ${arr[@]/*[aA]*/}    

Выход:

1

Для поиска и замены в массиве

//Search_using_Regular_Expression/Replace : Search & Replace

Search & Replace does not change in Original Value of Array Element. It just returned the new value. So you can store this value in same or different variable.

# Replacing Substring Temporary
echo ${arr[@]//a/A}         
echo ${arr[@]}             
echo ${arr[0]//r/R}        

Выход:

прАхар анкит 1 ришабх маниш абхинАв
прахар анкит 1 ришаб маниш абхинав
Рахар

Чтобы удалить переменную массива в сценарии оболочки?

To delete index-1 element

unset ARRAYNAME[1]

To delete the whole Array

unset ARRAYNAME
#! /bin/bash
# To declare static Array 
arr=(prakhar ankit 1 rishabh manish abhinav)
  
# To print all elements of array
echo ${arr[@]}        # prakhar ankit 1 rishabh manish abhinav
echo ${arr[*]}        # prakhar ankit 1 rishabh manish abhinav
echo ${arr[@]:0}    # prakhar ankit 1 rishabh manish abhinav
echo ${arr[*]:0}    # prakhar ankit 1 rishabh manish abhinav
  
# To print first element
echo ${arr[0]}        # prakhar
echo ${arr}            # prakhar
  
# To print particular element
echo ${arr[3]}        # rishabh
echo ${arr[1]}        # ankit
  
# To print elements from a particular index
echo ${arr[@]:0}    # prakhar ankit 1 rishabh manish abhinav
echo ${arr[@]:1}    # ankit 1 rishabh manish abhinav
echo ${arr[@]:2}    # 1 rishabh manish abhinav
echo ${arr[0]:1}    # rakhar
  
# To print elements in range
echo ${arr[@]:1:4}    # ankit 1 rishabh manish
echo ${arr[@]:2:3}    # 1 rishabh manish
echo ${arr[0]:1:3}    # rak
  
# Length of Particular element
echo ${#arr[0]}        # 7
echo ${#arr}        # 7
  
# Size of an Array
echo ${#arr[@]}        # 6
echo ${#arr[*]}        # 6
  
# Search in Array
echo ${arr[@]/*[aA]*/}    # 1
  
# Replacing Substring Temporary
echo ${arr[@]//a/A}        # prAkhAr Ankit 1 rishAbh mAnish AbhinAv
echo ${arr[@]}            # prakhar ankit 1 rishabh manish abhinav
echo ${arr[0]//r/R}        # pRakhaR

Выход:

прахар анкит 1 ришаб маниш абхинав
прахар анкит 1 ришаб маниш абхинав
прахар анкит 1 ришаб маниш абхинав
прахар анкит 1 ришаб маниш абхинав
Prakhar
Prakhar
ришаб
анкит
прахар анкит 1 ришаб маниш абхинав
анкит 1 ришаб маниш абхинав
1 ришаб маниш абхинав
рахар
анкит 1 ришаб маниш
1 ришаб маниш
грабить
7
7
6
6
1
прАхар анкит 1 ришабх маниш абхинАв
прахар анкит 1 ришаб маниш абхинав
пРАХАР

Ссылка:
https://www.tecmint.com/working-with-arrays-in-linux-shell-scripting/