1、申明数组
例一:
a=(111 222) #一对括表示是数组,数组元素用“空格“符号分割开。
echo ${a[0]} #数组下标从0开始
echo $a #数组也是指针形似,数组名称相当于一个指针,指向第一个数组元素
输出:
111
111
例二:
a=([0]=111 [1]=222)
例三:
a[0]=111
a[1]=222
2、数组的控制台输入
例一:
read a[0] #输入222回车
read a[1] #输入333回车
echo ${#a[@]}
输出:2
3、数组元素的删除
例一:
a=(111 222)
unset a[1] #删除a[1]元素
echo ${#a[@]}
输出:1
例二:
a=(111 222 333)
unset a #删除a数组
echo ${#a[@]}
输出:0
4、取数组的元素个数
规则:${#数组变量[@]}或${#数组变量[*]}
例一:
echo ${#a[@]} #对于shell脚本传参数,$@表示所有的参数,$#表示参数的个数,不难理解,数组也是这样
输出:2
5、取数组索引列表
规则:${!数组变量[@]}或${!数组变量[*]}
含义:把数组变量所有的索引列出,各索引值之间用空格符分开
例一:
filelist=(/etc/passwd /etc/issue /etc/sysconfig/syslog)
for index in ${!filelist[@]}
do
echo "index $index:${filelist[$index]}"
done
输出:
index 0:/etc/passwd
index 1:/etc/issue
index 2:/etc/sysconfig/syslog
6、子串提取
规则:${数组变量[@]:startindex:length}或${#数组变量[*]:startindex:length}
例一:
a=(111 222 333 444 555)
echo ${a[@]:0:3} #在数组中可以用:n进行数组的范围分片,显示一个范围的数值
7、子串替换
a=(111 222 333 444 555)
例一:第一个匹配到的,会被替换
echo ${a[@]/1/6}
输出:
611 222 333 444 555
例二:所有匹配到的,会被替换
echo ${a[@]//1/6}
输出:
666 222 333 444 555
例三:没有指定替换子串,则删除匹配到的子符
echo ${a[@]//1/}
输出:
222 333 444 555
例四:替换字符串前端子串
echo ${a[*]/#1/6}
611 222 333 444 555
例五:替换字符串后端子串
echo ${a[*]/%1/6}
输出:
116 222 333 444 555
小技巧:
1.生成30个#字符
seq -s '#' 30 | sed -e 's/[0-9]*//g'