目录
一.数组定义
1.1基本概念
在Shell脚本中,数组是一种用于存储多个值的数据结构。Shell支持一维数组,可以通过索引来访问数组中的元素。
shell中数组可大致分为两类:
1.普通数组:只能用整数作为数组的索引
2.关联数组:可以使用字符串作为数组的索引
2.1定义数组
在Shell中,可以通过以下方式声明和初始化一个数组:
# 声明并初始化数组
array_name=(value1 value2 value3 ... valueN)
例如:
fruits=("Apple" "Banana" "Cherry" "Date")
关联数组需要提前声明
declare -A myarry1
[root@localhost]# declare -A myarry1
[root@localhost]# myarry1=([name]=newrain [sex]=man [age]=26)
[root@localhost]# echo ${myarry1[name]}
newrain
二.访问数组元素
2.1基础访问
可以通过索引来访问数组中的元素,索引从0开始:
echo ${array_name[0]} # 输出第一个元素
echo ${array_name[1]} # 输出第二个元素
2.2获取数组的所有元素
可以使用@
或*
来获取数组中的所有元素:
echo ${array_name[@]} # 输出所有元素
echo ${array_name[*]} # 输出所有元素
关于在shell脚本中数组变量中 “*”跟 “@” 区别
*当变量加上“” 会当成一串字符串处理.
@变量加上“” 依然当做数组处理.
在没有加上“” 的情况下 效果是等效的.
2.3获取数组的长度
可以使用#
来获取数组的长度:
echo ${#array_name[@]} # 输出数组的长度
echo ${#array_name[*]} # 输出数组的长度
2.4数组的切片
可以对数组进行切片操作,获取部分元素:
echo ${array_name[@]:1:2} # 从索引1开始,获取2个元素
2.5数组的遍历
可以使用for
循环来遍历数组中的所有元素:
遍历数组while
[root@localhost]# cat array01.sh
#!/bin/bash
#++ i 是先自加1后赋值;i ++ 是先赋值后自加1。
while read line
do
host[i++]=$line # 观察i++ 和 ++i的区别
done </etc/hosts
for i in ${!host[@]} # 数组的元素索引
do
echo "$i:${host[i]}"
done
遍历数组for
[root@localhost]# cat array02.sh
#!/bin/bash
IFS=''
for line in `cat /etc/hosts` # 读取文件中的每一行
do
host[j++]=$line
done
for i in ${!host[@]}
do
echo ${host[i]}
done
三.示例脚本
以下是一个完整的示例脚本,展示了如何声明、初始化、访问和遍历数组:
#!/bin/bash
# 声明并初始化数组
fruits=("Apple" "Banana" "Cherry" "Date")
# 访问数组元素
echo "第一个水果是: ${fruits[0]}"
echo "第二个水果是: ${fruits[1]}"
# 获取数组的所有元素
echo "所有水果: ${fruits[@]}"
# 获取数组的长度
echo "水果的数量: ${#fruits[@]}"
# 数组的切片
echo "从第二个开始取两个水果: ${fruits[@]:1:2}"
# 遍历数组
echo "遍历所有水果:"
for fruit in "${fruits[@]}"; do
echo $fruit
done