2.2 shell数组

数组的定义

    所谓数组,是有序的元素序列,将有限个类型相同的变量的集合命名,这个名称为数组名。

    索引:又叫脚标,标号默认从0开始,属于数值索引。在 Bash4.0 后支持自定义索引格式,叫做关联数组。

    数组的声明:declare -a ARRAY_NAME (普通数组可以不事先声明)

                        declare -A ARRAY_NAME (关联数组必须要事先声明)

                         两者不可以互相转换

数组的操作

    赋值

1)对单个元素赋值:数组名[脚标号]="值"

2)对多个元素赋值:数组名=([脚标0]="值" [脚标1]="值" ...)

3)对所有元素赋值:数组名=("值0" "值1" "值2" ...)

    引用

引用单个元素:${数组名[脚标]}      脚标缺省默认为0

引用所有元素:${数组名[*/@]}

引用数组长度:${#数组名[*/@]}

    删除

    删除单个元素:unset 数组名[脚标号]           会导致稀疏格式,脚标号不连续

    删除所有元素:unset 数组名

    范例:破解由随机数命令生成数的MD5密文

#!/bin/bash
declare -i i=1
md5list=("efbaf275cd" "4be9c40b8b" "44b2395c46" "f8c8873ce0" "b902c16c8b" "ad865d2f63")

while [ "$i" -le 32768 -a ${#md5list[*]} != 0 ] ;do
	Break="`echo $i | md5sum | cut -c1-10`"

	for (( j=0;j<${#md5list[*]};j++ )) ;do
		if [ "$Break" = "${md5list[$j]}" ] ;then
		echo $i
		unset md5list[$j]
		break
		fi
	done

	let i+=1
done

数组的切片与追加

    切片

    语法:${数组名[@]:offset:numble}

offset:跳过的元素个数     numble:引用的元素个数,缺省默认为偏移后所有元素

    追加

    因为数组脚标默认从0开始,当数组不是稀疏格式时,最后一个元素的脚标是 n-1,而数组长度为n

    语法:数组名[${#数组名[*/@]}]=值

    范例:实现转换矩阵

#!/bin/bash
declare -A arr
num=1
read -p "size is: " s
for ((i=0;i<s;i++)) ;do
	for ((j=0;j<s;j++)) ;do
		arr[$i$j]=$num
		let num+=1
		echo -ne "${arr[$i$j]}\t"
	done
	echo
done

for ((i=0;i<s;i++)) ;do
	for ((j=i;j<s;j++)) ;do
		tmp=${arr[$i$j]}
		arr[$i$j]=${arr[$j$i]}
		arr[$j$i]=$tmp
	done
done

echo

for ((i=0;i<s;i++)) ;do
	for ((j=0;j<s;j++)) ;do
		echo -en "${arr[$i$j]}\t"
	done
	echo
done




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值