一 数组
1.1 定义数组
通过指定元素定义
array[key]=value
key代表索引,如array[1]=one,索引从0开始
echo “${array[@]}”获取所有数组元素的值。
通过declare语句定义
declare –a array
通过元素值集合定义
array={ v0 v1 v2v3}
通过键值定义
array=([0]=value0[1]=value1)
1.2 数组的赋值
按索引为元素赋值:
array[n]=value
通过集合为数组赋值
array=(a b c)
通过循环为数组元素赋值
例子:
#! /bin/bash
#通过循环为数组赋值
for i in {1..10}
do
array[$i]=$i
done
#输出元素的值
echo"${array[@]}"
1.3 访问数组
访问第一个数组元素:
可用数组名和下标为0的元素,如echo“${array}”
通过下标访问数组元素:
下标从0开始,echo“${array[3]}”
计算数组的长度:
${#array[@]}
例子:
#! /bin/bash
#定义数组
array=(Mon Tue WedThu Fri Sat Sun)
#输出数组长度
echo "thelength of the array is ${#array[@]}"
获取某个数组元素的长度
linux[0]="Debian"
linux[1]="RedHat"
linux[2]="Ubuntu"
linux[3]="Suse"
#输出第4个元素
echo "thefourth element is ${linux[3]}"
#输出第4个元素的长度,4
echo "the length of the fourth element is${#linux[3]}"
#输出第1个元素的值
echo "thefirst element is ${linux}"
#输出第1个元素的长度
echo "the length of the first element is${#linux}"
通过循环遍历数组元素:
#! /bin/bash
array=(Mon Tue WedThu Fri Sat Sun)
#获取数组长度
len="${#array[@]}"
#通过循环结构遍历数组
for((i=0;i<$len;i++))
do
echo "${array[$i]}"
done
引用所有数组元素
#! /bin/bash
array=(Mon Tue WedThu Fri Sat Sun)
#通过循环输出所有的数组元素
for e in"${array[@]}"
do
echo "$e"
done
以切片部分获取部分数组元素
${array[@|*]:start:length}
start表示起始元素的下标,lengh表示要截取的数组元素的个数
数组元素的替换:
并不影响原来的数组的值
${array[@|*]/pattern/replacement}
pattern表示要搜索的字符串,replacement表示用来替换的字符串
#! /bin/bash
#定义数组
a=(1 2 3 4 5)
#输出替换结果
echo "theresult is ${a[@]/3/100}"
#输出原始数组
echo "the oldarray is ${a[@]}"
#将替换结果赋给一个数组变量
a=(${a[@]/3/100})
#输出新的数组变量的值
echo "the newarray is ${a[@]}"
1.4 删除数组
删除指定数组元素:
unset array[n]
删除整个数组
unset array
1.5 其他操作
复制数组:
创建一个已经存在的数组的副本
如:
newarray=(“${array[@]}”)
linux=("Debian""RedHat" "Ubuntu" "Suse" "Fedora""UTS" "CentOS")
#复制数组
linux2=("${linux[@]}")
echo"${linux2[@]}"
连接数组:
将两个数组的数组元素连接在一起,变成一个大的数组。新的数组一次包含两个数组所有元素
(”$array1[@]” “${array2[@]}”)
如:
#定义2个数组
linux=("Debian""RedHat" "Ubuntu" "Suse" "Fedora""UTS" "CentOS")
shell=("bash""csh" "ksh" "rsh" "sh" "rc""tcsh")
#连接数组
linuxshell=("${linux[@]}""${shell[@]}")
#输出合并后的数组
echo "the newarray is ${linuxshell[@]}"
#输出新的数组的长度,14
echo "thelength of new array is ${#linuxshell[@]}"
加载文件内容到数组
用户可以将普通的文本文件的内容直接加载到数组中,文件的每一行构成数组一个元素的内容。在处理日志文件时非常有用。
如:
准备一个文本文件,demo.txt
内容为
Ubuntu
Suse
Fedora
UTS
将demo.txt内容加载到一个数组中,然后将数组内容打印处理
#加载文件内容
content=(`cat"demo.txt"`)
#通过循环输出数组内容
for s in"${content[@]}"
do
echo "$s"
done