Основы работы с массивами в сценариях оболочки | Комплект 1
Рассмотрим ситуацию, если мы хотим сохранить 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=]stringARRAYNAME=([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 elementecho ${ARRAYNAME[INDEXNR]}
# To print particular element echo ${arr[3]} echo ${arr[1]} |
Выход:
ришаб анкит
To print elements from a particular indexecho ${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 rangeecho ${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 elementunset ARRAYNAME[1]
To delete the whole Arrayunset 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/