首页 > Linux Shell, 操作系统 > SHELL变量之数组

SHELL变量之数组

2015年2月5日 发表评论 阅读评论

1.数组的定义

1.1.定义同时赋多个值

[test@Server1 shell]$ names=(tom jack lili)

注意:数组的元素以空格作为分隔符。下标从0开始

1.2按索引赋值

[root@Server1 jdk1.6.0_45]# names[0]=tom
[root@Server1 jdk1.6.0_45]# names[1]=jack
[root@Server1 jdk1.6.0_45]# names[5]=lily

注意:自定义索引时,索引可以不连续

1.3.定义同时使用通配符赋值

[root@Server1 ~]# files=(/usr/local/jdk1.6.0_45/bin/j*)

/usr/local/jdk1.6.0_45/bin目录下以j开头的文件作为数组元素。

1.4.定义同时使用命令赋值

通过命令返回的结果通常以换行符作为元素,所以需要先改变默认的分隔符

[root@Server1 ~]# IFS=$'\n'
[root@Server1 ~]# files=(` ls -l /usr/local/jdk1.6.0_45/bin/j*`)

2.操作数组

2.1根据索引访问元素

[test@Server1 ~]$ names=(tom jack lily)
[test@Server1 ~]$ echo ${names[1]}
jack

为什么返回jack,因为默认的索引是从0开始

如果你定义的索引不连续,则需要指定你定义时的索引

[test@Server1 ~]$ unset names
[test@Server1 ~]$ names[10]=tom
[test@Server1 ~]$ names[100]=jack
[test@Server1 ~]$ names[1000]=lili
[test@Server1 ~]$ echo ${names[100]}
jack

2.2返回数组的所有元素

[test@Server1 ~]$ echo ${names[*]}
tom jack lili
[test@Server1 ~]$ echo ${names[@]}
tom jack lili

2.3返回数组的元素个数

[test@Server1 ~]$ echo ${#names[@]}
3
[test@Server1 ~]$ echo ${#names[*]}
3

2.4返回索引

[test@Server1 ~]$ unset names
[test@Server1 ~]$ names[10]=tom
[test@Server1 ~]$ names[100]=jack
[test@Server1 ~]$ names[1000]=lili
[test@Server1 ~]$ echo ${!names[*]}
10 100 1000

2.5增加一个元素

[test@Server1 ~]$ unset names
[test@Server1 ~]$ names[10]=tom
[test@Server1 ~]$ names[100]=jack
[test@Server1 ~]$ names[1000]=lili
[test@Server1 ~]$ names+=(sue) #新增元素的索引是最大索引加1

2.6删除一个元素

[test@Server1 ~]$ echo ${names[*]}
tom jack lili sue
[test@Server1 ~]$ unset names[1000]
[test@Server1 ~]$ echo ${names[*]}
tom jack sue

2.7循环数组元素和索引

#!/bin/bash
names=(tom jack lili)
echo  "循环数组元素"
for name in ${names[*]};do
echo $name
done
echo  "循环数组元素"
for index in ${!names[*]};do
echo $index
done

3.关联数组

关联数组的索引可以是字符串,申明的语法是:

declare -A ass_array
[test@Server1 ~]$ declare -A fruits_value
[test@Server1 ~]$ fruits_value=([apple]='100dollars' [orange]='150 dollars')

操作方法同普通的数组一样,注意索引的类型即可

分类: Linux Shell, 操作系统 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.