linux数组shell数组添加内容,shell数组的定义与应用

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。shell 下的多维数组是可以通过1维数组组合的,本篇也会在后面提到多维数据。

一、定义数组

在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:

array=(value1 value2 ...... valueN) #从下标0开始依次赋值

array=([1]=value1 [2]=value2 [0]=value0) #指定下标赋值

declare -a array=(value1 value2 ...... valueN) #声明+赋值,也可以只声明

unixtype=('Debian' 'Red Hat' 'Fedora') #如果元素有空格,就要用引号

set| grep array #利用set查看数组赋值情况

除此之外也可以通过read的交互的方式定义数组。如下:

# read -a array #-a表示从标准输入读入数组,遇到换行为止

1 2 3 4 5

# echo "${array[@]}"

1 2 3 4 5

可以通过如下方法清除数组:

unset array #清除数组

unset array[1] #清除数组的指定元素

示例:

unixtype=('Debian' 'Red Hat' 'Fedora')

各值单独定义

NAME[0]="Zara"

NAME[1]="Qadir"

NAME[2]="Mahnaz"

二、数组变量

现网应用中经常需要获取元素的个数、下标值的情况,shell本身也提供了获取的方法。# 取得数组元素的个数

length=${#array_name[@]}

# 或者

length=${#array_name[*]}

# 取得数组单个元素的长度

lengthn=${#array_name[n]}

#取得数组下标的值

${!array[@]}

#从数组的n位置开始取m个元素

${array[@]:n:m}

示例如下:

[root@localhost ~]# unixtype=('Debian' 'Red Hat' 'Fedora')

[root@localhost ~]# echo ${#unixtype[@]}

3

[root@localhost ~]# echo ${#unixtype[*]}

3

[root@localhost ~]# echo ${#unixtype[1]}

7

[root@localhost ~]# echo ${!unixtype[@]}

0 1 2

[root@localhost ~]# echo ${!unixtype[2]}

--> 无结果输出

[root@localhost ~]# echo ${unixtype[@]:1:2}

Red Hat Fedora

[root@localhost ~]# echo ${unixtype[@]:1:3}

Red Hat Fedora

注意${array[@]:n:m}的用法,后面的m当大于可取的范围时,是不会报错的。

三、数组的常用操作

1、命令执行结果放入数组

[root@361way ~]# array=($(ls | grep '.sh'))

[root@361way ~]# array=(`ls | grep '.sh'`)

[root@361way ~]# echo ${array[@]}

11.sh a.sh b.sh del_log.sh getcoreinfo.sh ntp.sh read.sh rrs.sh script.sh

2、读入字符串,给数组赋值

i=0

n=5

while [ "$i" -lt $n ] ; do #遍历5个输入

echo "Please input strings ... `expr $i + 1`"

read array[$i] #数组赋值

b=${array[$i]}

echo "$b"

i=`expr $i + 1` #i递增

done

3、字符串的字母逐个放入数组并输出

# cat a2.sh

chars='abcdefghijklmnopqrstuvwxyz'

i=0

while [ $i -lt ${#chars} ] ; do # ${#char}是字符串长度

#echo ${chars:$i:1} $i

array[$i]=${chars:$i:1} #从$i取1个字节

echo ${array[@]} $i

#echo ${array[$i]} $i

i=`expr $i + 1`

done

执行测试的时候,可以试下将echo ${array[@]} 换做echo $array ,会发现输出会有不同的,默认echo $arry 输出的是下第一个元素,即下标为0的值。这点是和python里的数组不一样的。

4、判断一个变量是否在数组中

一个很简洁的写法是:

echo ${array[@]} | grep -wq "${member}"

if [ $? -eq $SUCCESS ];then

但是这会带来一个问题,如果array的元素里面带有空格,就会误认为是一个元素,因此遍历比较是更稳妥的选择。

for i in ${array[@]};do

if [ "$i" = "${member}" ];then

....

fi

done

5、构建二维数组

a=('1 2 3' '4 5 6' '7 8 9') #赋值,每个元素中都有空格

for i in ${a[@]} ; do

b=($i) #赋值给b,这样b也是一个数组

for j in ${b[@]};do #相当于对二元数组操作

......

done

done

6、文件内容读入数组

# cat /etc/shells | tr "\n" " " >/tmp/tmp.file #回车变空格

# read -a array < /tmp/tmp.file #读入数组

# set| grep array

array=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/dash")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值