shell数组

 


一、数组概述

1.数组的概念

  是一种容器,可以同时存放多个数据值。

2.数组的特点

1.数组是一种引用数据类型。
2.数组当中的多个数据,类型 必须统一。
3.数组长度在程序运行期间不可改变。

3.数组定义方法

方法1
  数组名=(value0 value1 value2 …)

方法2
  数组名=([0]=value [1]=value [2]=value …)

方法3
  列表名=“value0 value1 value2 …”
  数组名=($列表名)

方法4
  数组名[0]=“value”
  数组名[1]=“value”
  数组名[2]=“value”

二、数组包括的数据类型

1.数据类型

  (1)数值类型
  (2)字符类型(字符串)
使用" " 或 ’ ’ 定义,防止元素当中有空格,元素按空格分割

2.获取数组长度

  arr_number=(1 2 3 4 5)
  echo ${#arr_number[*]} 或 echo ${#arr_number[@]}

3.获取数据列表

  echo ${arr_number[*]}

  echo ${arr_number[@]}

4.读取某个下标赋值

  arr_index2=${arr_number[2]}
  echo $arr_index2


三、使用数组

1.数组遍历,循环中使用数组

#!/bin/bash
arr=(10 20 30 40 50 60 )
for i in ${arr[@]}
do

echo $i

done

 

2.数组切片

复制代码
arry=(1 2 3 4 5 6)
echo ${arry[*]}

echo ${arry[@]} #输出整个数组,此处*与@相同

echo ${arry[@]:0:2} #获取 ${数组名[@或*]:起始位置:长度} 的值

echo ${arry[@]:2:2}

echo ${arry[@]:3:4}
复制代码

 

 

3.数组替换

方法一:替换所有符合条件的

格式:${数组名[*或@]/源参数值/将要替换的参数值}

arr2=(1 2 3 4 5)
#临时替换:将数组arr1中的参数值3替换为66,但原来的数组中的参数值并不会改变
echo ${arr2[*]/3/66}
echo ${arr2[*]}

#永久替换:可通过重新赋值实现
arr2=(${arr2[*]/3/66})
echo ${arr2[*]}

 

 

方法二:替换单个,指定下标替换。

arry=(1 2 3 4 5 6)
echo ${arry[*]}
arry[0]=7
echo ${arry[*]}


4.数组删除

  格式:unset 数组名[索引] #删除单个

  unset 数组名 #删除整个数组

5.数组追加元素

方法一:单个添加

arr=(1 2 3 4 5 6 7)
echo ${arr[6]}
arr[7]=8
arr[8]=9
echo ${arr[*]}

方法二:增加数组长度填加

arr4=(1 2 3 4 5 6 7)
echo ${arr4[*]}
arr4[${#arr4[*]}]=8 #根据长度添加参数
echo ${arr4[*]}



方法三:重新定义数组

arr4=(1 2 3 4 5 6 7)
echo ${arr4[*]}
arr4=("${arr4[@]}" 8 9 10) #加上新参数重新定义数组
echo ${arr4[*]}

 

双引号不能省略,否则数组中存在包含空格的元素时会按空格将元素拆分成多个
不能将“@”替换为“*”,如果替换为“* ”,不加双引号时与“@”的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中


6.函数返回数组

复制代码
#!/bin/bash

#用于求数组中所有元素的累加和
test2 () {
newarr1=($@)
arrlist=${newarr1[*]}
sum=0

for i in $arrlist
do
sum=$[$sum+$i]
done
echo $sum

}
复制代码

 

#用于把原数组中所有元素值乘以2后生成一个新的数组并输出

复制代码
test3 () {
newarr2=($@)
length=${#newarr2[@]}
for ((j=0;j<$length;j++))
do
newarr2[$j]=$[${newarr2[$j]} * 2]
done
echo ${newarr2[*]}

}
######main######

arry=(10 20 30 40 50)
echo "原数组的列表为:${arry[@]}"
res1=`test2 ${arry[@]}`
echo "test1中的新数组的累加和为:$res1"
复制代码

【参考文档】

原文链接:https://blog.csdn.net/weixin_55613232/article/details/116988585

posted @   郭大侠1  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2021-06-23 【sql server压测】sql server hammerdb压测(tps)
2020-06-23 Apexsql log最佳实践
2020-06-23 【bat】bat命令实践
2019-06-23 (4.15)mysql备份还原——物理备份之XtraBackup的下载与安装
点击右上角即可分享
微信分享提示