【Linux】shell数组

1.数组的概念

    shell数组就是一个元素集合,它把有限个元素用一个名字来命名,然后用编号对他们分区。这个名字称为数组名,用于区分不同内容的编号称为数组的下标。

    数组的设计其实就是为了处理方便,把具有相同类型的若干变量按有序的形势组织起来的一种形势,以减少重复频繁的单独定义。

2.数组的定义

# 语法:
array=(value value1 value3 ...)
# 实例:
array=(1 2 3)

或者

# 语法:
array=([key1]=value1 [key2]=value2 ...)
# 实例:
array=([3]='A' [9]='B' [6]='C')

再或者

arr1[0]=value
arr1[1]=value1
arr1[2]=value2

还可以使用动态命令定义数组

arr2=($(ls /))

3.数组的读取

注意:数组的元素下标是从0开始的

echo ${QINYS[0]} 引用第一个数组变量,结果打印test1;

echo ${QINYS[1]} 引用第二个数组变量;

echo ${QINYS[@]} 显示该数组所有参数;

echo ${#QINYS[@]} 显示该数组参数个数,也可以使用echo ${#QINYS[*]} ;

echo ${#QINYS[0]} 显示test1字符长度;

echo ${QINYS[@]:0} 打印数组所有的值;

echo ${QINYS[@]:1} 打印从第二个值开始的所有值;

echo ${QINYS[@]:0:2} 打印从第一个值与第二个值;

echo ${QINYS[@]:1:2} 打印从第二个值与第三个值。

4.数组的增删

4.1 增加或覆盖

“数组名[下标]”对数组进行引用赋值,如果存在,则覆盖,不存在则新增

例如:arr3[4]=5 表示数组arr3中没有第4个元素,则新增,有则覆盖元素

4.2 删除

使用命令unset删除

示例:unset arr3[0]

删除整个数组

示例:unset arr3


3、shell数组脚本案例

3.1.循环打印数组元素

#!/bin/bash
array=(1 2 3)
for((i=0;i<${#array[@]};i++))
do
	echo ${array[i]}
done

输出结果:

image

2.通过普通for循环语句打印数组元素

#!/bin/bash
array=(1 2 3)
for i in ${array[@]}
do
	echo $i
done

输出结果:

image


3.通过while循环打印数组

#!/bin/bash
array=(1 2 3)
i=0
while((i<${#array[@]}))
do
	echo ${array[i]}
	((i++))
done

输出结果与上述相同


4.竖向定义数组并批量打印

#!/bin/bash
arr_ip=(
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5)

#循环打印数组
for((i=0;i<${#arr_ip[@]};i++))
do
	echo "The num is $i,the ip is ${arr_ip[i]}"
done
echo "---------------------"
echo "ayy_ip length is :${#arr_ip[@]}"

输出结果:

image


4、现实案例

需求:利用bash打印出下面这句话中大于等于5个字母的单词

my favourite subject is English . and i like sports very much

方法一:

#!/bin/bash
arr=(my favourite subject is English . and i like sports very much)
for((i=0;i<${#arr[@]};i++))
do
	if [ ${#arr[i]} -gt 5 ]
	  then
		echo "${arr[i]}"
	fi
done
echo '----------------------'
for word in ${arr[*]}
do
	if [ `expr length $word` -gt 5 ];
	  then
		echo $word
	fi
done

输出结果:

image

方法2:使用awk打印

Linux:/qinys/data # chr="my favourite subject is English . and i like sports very much"
Linux:/qinys/data # echo  $chr|awk '{for(i=0;i<=NF;i++) if(length($i)>5) print $i}'
my favourite subject is English . and i like sports very much
favourite
subject
English
sports

原文地址:https://www.cnblogs.com/OliverQin/p/10256648.html