数组
数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
索引:编号从0开始,属于数值索引
注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)
声明数组:
declare -a ARRAY_NAME
declare -A ARRAY_NAME:关联数组(必须先声明后使用)
数组元素的赋值
1、一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE weekdays[0]="Sunday" weekdays[4]="Thursday"
2、一次赋值全部元素
ARRAY_NAME=("VAL1""VAL2""VAL3"...)
3、只赋值特定元素
ARRAY_NAME=([0]="VAL1"[3]="VAL2"...)
read -a ARRAY
引用数组元素:
${ARRAY_NAME|[INDEX]}
注意:省略[INDEX]表示引用下标为0的元素
引用数组所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
删除数组中的某元素:导致稀疏格式
unset ARRAY[INDEX]
删除整个数组:
unset ARRAY
示例:
生成10个随机数保存于数组中,并找出其最大值和最小值 。思路:设置两个变量,一个存储最大值,一个存储最小值,
#!/bin/bash declare -i min max declare -a nums for ((i=0;i<10;i++));do num[$i]=$PANDOOM [$i -eq 0 ] && min=${nums[$i]} && max=${nums[$i]}&& continue [${nums[$i]} -gt $max] && max=${num[$i]} [${nums[$i]}-gt $max] && max=${nums[$i]} [${nums[$i]} -lt $min] && min=${nums[$i]} done echo "All numbers are ${nums[*]}" echo Max is $max echo min is $min
方法二、利用循环
#!/bin/bash declare -a rand #声明数组 for ((i=0;i<10;i++));do rand[$i]=$RANDOM if [ $i -eq 0 ];then max=${rand[$i]} min=$max else [ $max -lt ${rand[$i]} ] && { max=${rand[$i]};continue; } [ $min -gt ${rand[$i]} ] && min=${rand[$i]} fi done echo all rand is ${rand[*]} echo Max rand is $max echo Min rand is $min
引用数组中的元素:
offset:要跳过的元素个数
number:要取出的元素个数
取偏移量之后的所有元素
${ARRAY[@]:offset}
向数组中追加元素
ARRAY[${#ARRAY[*]}]=value
关联数组:
declare -A ARRAY_NAME
ARRAY_NAME=([idex_name1]='val1'[idx_name2]='val2 '...)
示例
编写脚本,定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;统计出其下标为偶数的文件中的行数之和
#!/bin/bash # declare -a file files=(/var/log/*.log) declare -in lins=0 for i in $(seq 0 $[${#files[*]}-1]);do if [ $[$i%2] -eq 0 ];then let lines+=$(wc -l ${files[$i]} | cut -d''-f1) fi done echo "Lines:$lines."
浙公网安备 33010602011771号