shell编程之数组
Posted 锦衣admin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell编程之数组相关的知识,希望对你有一定的参考价值。
数组介绍
数组可以让用户一次性赋予多个值,读取数据时只需要通过索引调用
数组和变量一样,都是一个容器,不同点是数组可以存储多个值
普通数组: 只能使用整数作为数组索引(元素的下标)
关联数组: 可以使用字符串作为数组索引(元素的下标)
元素的下标从0开始,即下标0代表元素1,下标1元素2,下标2代表元素3
普通数组
普通数组说明:
普通数组定义:
#l 数组名称=(元素1 元素2 元素3 ..)
下标: 0 1 2
数组赋取值:
一次赋取一个值:
命令格式:通过下标赋取值
#l 数组名称[索引值]=元素n
演示:
# array_ts[0]='hello' => 通过下标赋值,'数组名称[索引值]=元素n'
# echo "${array_ts[0]}" => 通过下标取值,"${数组的名称[索引值]}"
[root@server ~]# array_ts[0]='hello'
[root@server ~]# array_ts[1]='word'
[root@server ~]# array_ts[2]=1
[root@server ~]# array_ts[3]=2.2
[root@server ~]# echo "${array_ts[0]}"
hello
[root@server ~]# echo "${array_ts[1]}"
word
[root@server ~]# echo "${array_ts[2]}"
1
[root@server ~]# echo "${array_ts[3]}"
2.2
一次赋取多个值:
命令格式:
# array1=(var1 var2 var3 ..) => 直接在括号内键入元素赋值,以空格分隔
# array2=(`cat /etc/passwd`) => 通过cat命令,将文件中每一行赋值给数组
# array3=(`ls /root`) => 通过ls命令,将文件名称键入元素赋值
# arrat4=(you can "you du") => 数组内字符串可以不加引号,引号内为一个元素
# array5=(1 1.1 a 'a' [10]='hi') => 键入的下标10可以指定下标10取值,中间下标4~9取值会返回空
普通数组取值调试说明:
数组调用:
命令格式:
#l ${array[i]}:指定下标i取值,
=> 将 "i" 换成 "@" 或 "*" 可以获取数组所有元素;取值的时候@*可以互换
取值说明:
{array[0~N]}:0表示获取第一个元素,N表示获取第N+1个元素
{array[*]}:获取出所有元素
{#array[*]}:获取数组元素的总个数
{!array[@]}:获取数组元素的下标[索引]
{array[@]:n:m}:获取下标位n的元素,取其后面m-1个元素
演示:
# echo ${array[0]} => 取第一个元素
# echo ${array[*]} => 获取数组所有元素
# echo ${#array[*]} => 获取数组里所有元素个数
# echo ${!array[@]} => 获取数组元素的下标
# echo ${array[@]:1:2} => 访问指定元素,1代表从下标1的元素开始,2代表获取后面元素个数
[root@server ~]# array=(1 1.1 a 'a' [10]='hi')
[root@server ~]# echo ${array[0]}
1
[root@server ~]# echo ${array[*]}
1 1.1 a a hi
[root@server ~]# echo ${#array[*]}
5
[root@server ~]# echo ${!array[@]}
0 1 2 3 10
[root@server ~]# echo ${array[@]:1:2}
1.1 a
关联数组
关联数组允许用户自定义数组的索引名称
,是一个无序数组
需要提前声明这是一个关联数组,然后再赋值
元素和索引中间不能留空格(除非元素用引号引起来),否则会给出一个元素没有指定索引的错误(true:array[]
…false:array []
)
关联数组与普通数组调用方法一样
关联数组说明:
首先声明关联数组:
命令格式:
# declare -A asso_array1
# declare -A asso_array2
# declare -A asso_array3
选项说明:
-A array:表示声明一个关联数组
数组赋值:
一次赋一个值:数组名[索引]=变量值
# asso_array1[linux]=one
# asso_array1[java]=two
# asso_array1[php]=three
一次赋多个值:
# asso_array2=([name1]=TVset [11]=recorder ['sd']="Cell phone" [nam21d]=3 [name5]=5.5)
# asso_array2=([name1]=TVset [name2]=recorder [name3]="Cell phone" [name4]=3 [name5]=5.5)
=> 需要注意空格问题
查看关联数组:
# declare -A
#l 关联数组调用:与普通数组调用一样
以上是关于shell编程之数组的主要内容,如果未能解决你的问题,请参考以下文章