Shell脚本中的数组基础知识|集1

考虑一个情况,如果我们想存储1000个数字并对它们执行操作。如果我们使用简单的变量概念,那么我们必须创建1000个变量,并对它们执行操作。但很难处理大量变量。因此,最好在数组中存储相同类型的值,然后通过索引号进行访问。

null

Shell脚本中的数组 数组是同一类型数据的系统化排列。但是在Shell脚本中,数组是一个包含多个值的变量,这些值可能是同一类型的,也可能是不同类型的,因为在Shell脚本中,默认情况下,所有内容都被视为字符串。数组是从0开始的。

如何在Shell脚本中声明数组? 我们可以用不同的方式在shell脚本中声明数组。

1.间接申报 在间接声明中,我们在数组变量的特定索引中指定了一个值。不需要先申报。

ARRAYNAME[INDEXNR]=value

2.明确声明 在显式声明中,首先声明数组,然后赋值。

declare -a ARRAYNAME

3.复合赋值 在Compount赋值中,我们用一组值声明数组。我们以后也可以添加其他值。

ARRAYNAME=(value1 value2  .... valueN)

或 [indexnumber=]字符串

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

要在Shell脚本中打印数组值?

打印所有元素 [@] & [*] 表示数组的所有元素。

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}


输出:

prakhar ankit 1 rishabh manish abhinav
prakhar ankit 1 rishabh manish abhinav
prakhar ankit 1 rishabh manish abhinav
prakhar ankit 1 rishabh manish abhinav

打印第一个元素

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


输出:

prakhar
prakhar

打印所选索引元素的步骤

echo ${ARRAYNAME[INDEXNR]}

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


输出:

rishabh
ankit

打印特定索引中的元素

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}


输出:

prakhar ankit 1 rishabh manish abhinav
ankit 1 rishabh manish abhinav
1 rishabh manish abhinav
prakhar

打印范围内的元素

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}


输出:

ankit 1 rishabh manish
1 rishabh manish
rak

计算数组中的

计算数组中特定元素的长度。 使用#(散列)打印特定元素的长度

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


输出:

7
7

计算数组的长度。

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


输出:

6
6

在数组中搜索

arr[@] :所有数组元素。 /Search_using_Regular_Expression/ :在数组中搜索 如果搜索找到模式,则返回1,否则返回零。它不会改变原始数组元素。

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


输出:

1

在数组中搜索和替换

//Search_using_Regular_Expression/Replace :搜索和替换

搜索和替换不会更改数组元素的原始值。它只是返回了新的值。所以你可以把这个值存储在相同或不同的变量中。

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


输出:

prAkhAr Ankit 1 rishAbh mAnish AbhinAv
prakhar ankit 1 rishabh manish abhinav
RakhaR

要删除Shell脚本中的数组变量?

要删除index-1元素

unset ARRAYNAME[1]

要删除整个数组

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


输出:

prakhar ankit 1 rishabh manish abhinav
prakhar ankit 1 rishabh manish abhinav
prakhar ankit 1 rishabh manish abhinav
prakhar ankit 1 rishabh manish abhinav
prakhar
prakhar
rishabh
ankit
prakhar ankit 1 rishabh manish abhinav
ankit 1 rishabh manish abhinav
1 rishabh manish abhinav
rakhar
ankit 1 rishabh manish
1 rishabh manish
rak
7
7
6
6
1
prAkhAr Ankit 1 rishAbh mAnish AbhinAv
prakhar ankit 1 rishabh manish abhinav
pRakhaR

参考: https://www.tecmint.com/working-with-arrays-in-linux-shell-scripting/

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享