一、数组基础
Shell的数组就是把有限个元素(变量或字符内容)用一个名字命名,然后用编号对它们进行区分的元素集合。这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量
数组也是一种变量变量,所以变量子串的相关功能数组也同样适用,数组下标默认是从0开始计数的。
数组的相关知识通过man bash然后搜Arrays来了解。
1. 定义数组
1) 静态命名数组
- 方法1[推荐]
array1=(1 2 3)
- 方法2
array2=(
www.baidu.com
www.sina.com
)
- 方法3
array=([0]=one [1]=two [2]=three [3]=four)
2) 动态命令创建数组
array=($(ls))
array=(`ls`)
2. 打印数组
1) 打印所有元素:
$(array[@])
$(array[*])
2) 打印数组长度:
$(#array[@])
$(#array[*])
3) 打印单个元素:
$(array[i])
3. 增改数组数据
1) 增改
array[0]=one
array[1]=two
array[2]=three
如果对应的下标值不存在,则新赋值,如果已存在,则会覆盖原值
4. 删除数组数据
因为数组本质上还是变量,因此可通过“unset 数组[下标]”清除相应的数组元素,如果不带下标,表示清除整个数组的所有数据。
unset array[1]
unset array
5. 切片和替换[变量子串]
数组也是变量,因此也适合于前面讲解过的变量的子串处理的功能应用。
1) 切片功能
array=(1 2 3 4 5)
echo ${array[@]:1:3}
2 3 4
从下标为1的元素开始截取,共取3个数组元素。其他用法参考变量子串的用法
2) 替换
array=(1 2 3 1 1)
echo ${array[@]/1/b}
b 2 3 b b
把数组中的1替换成b,原数组未被修改,和sed很像。其他用法参考变量子串的用法
调用方法是:${数组名[@或*]/查找字符/替换字符}
该操作不会改变原先数组
二、案例
1. 内容打印数组元素个数
array=(1 2 3 4 4) && echo ${array[@]}
1 2 3 4 4echo ${#array[@]}
5echo ${array[1]}
2数组下标默认是从0开始计数的
2. for循环打印数组
用数组和for循环将“i am oldboy my teacher is luogang”这句话中,字符数小于等于6个的单词打印出来
cat /server/scripts/d1.sh
#!/bin/bash
array=(i am oldboy my teacher is luogang)
for n in ${array[*]}
do
if [ `echo $n|wc -L` -le 6 ]
then
echo $n
fi
done
echo -----------------
for((i=0;i<${#array[*]};i++))
do
if [ ${#array[i]} -le 6 ]
then
echo ${array[i]}
fi
done
- sh /server/scripts/d1.sh