【Linux】shell数组

时间:2021-07-03 00:25:01

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

输出结果:

【Linux】shell数组

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

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

输出结果:

【Linux】shell数组

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[@]}"

输出结果:

【Linux】shell数组

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

输出结果:

【Linux】shell数组

方法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