一:数组
数组简介:用一个固定的字符串,代替多个不固定字符串。
数组分为普通数组和关联数组。普通数组的索引只能是整数,关联数组的索引可以是字符串。
一:普通数组
定义数组方法1:数组名[索引]=变量值 例如:test[0]=apple;注意:数组的索引是从0开始的
定义数组方法2:数组名=(变量名 变量名) 在该方法中,索引是自动添加的,从0开始。例如:test2=(`cat /etc/passwd`) 把小括号里的命令先行执行, 得出的结果作为test2数组的变量值,每一行内容即是一个变量值。
查看数组方法1 : declare -A | grep 变量名 示例:declare -A | grep test2 该查看方法既可以查看数组名,变量值,也可以查看索引。
查看数组方法2:echo ${变量名[索引值]}示例:echo ${test2[*]} *等于@都是所有索引值的意思,该查看方法只能查看变量值
查看数组全部的索引:echo ${!变量名[@]} 示例:echo ${!test1[@]} 查看test1的索引,该方法只能查看索引值
查看某索引的变量值:${数组名[索引]} 示例:echo ${test1[0]} 查看索引为0的数组
获取数组长度方法1:echo ${#数组名[*]} 示例:echo ${#test1[*]} 返回值即是数组的长度
获取数组长度方法2:${#数组名[@]} 示例:echo ${#test1[@]} 返回值即是数组的长度
从指定位置查看变量值:echo ${test1[@]:1} 从数组下标1开始访问所有变量值
从指定位置查看指定长度的变量值:echo ${test1[@]:1:2} 从数组索引1开始,访问两个元素
二:关联数组
关联数组在使用之前必须要先进行声明
声明数组方法:declare -A 变量名 例如:declare -A test3
数组赋值方法一:一次赋一个值:数组名[索引]=变量值 例如:test3[index1]=pear
数组赋值方法二:一次赋多个值:数组名=([索引值]=变量值 [索引值]=变量值) 例如:test3=([fuzhu]=dunshan [shangdan]=lvbu [fashi]=xiaoqiao [daye]=hanxin [sheshou]=yuji)
查看数组的方法与上面的查看方法一致,查看数组变量值和数组索引值的方法也都一样。
三:属组和循环
案例一:while脚本快速定义数组
#!/bin/bash
#循环读取文件,定义数组
while read line
do
hosts[++i]=$line #hosts:数组名 #[++i]:索引递增,++i是1开始,i++是0开始,#$line:值,即文件中的内容
done < /etc/hosts
#输出索引每一行
for i in ${!hosts[@]}
do
echo "$i : ${hosts[$i]}"
done
案例2:for脚本快速定义数组
[root@localhost ~]# vim for_array.sh
#!/bin/bash
OLD_IFS=$IFS #将旧的分隔符备份
IFS=$'\n' #定义for的分隔符是换行符
for line in `cat /etc/hosts` #line就是hosts中的值
do
hosts[++i]=$line
done
for i in ${!hosts[@]}
do
echo "$i: ${hosts[$i]}"
done
IFS=$OLD_IFS #将分隔符还原,便于脚本后方的for使用
案例3:数组统计性别
[root@localhost ~]# vim sex.txt #定义性别文件
jack m
alice f
tom m
#!/bin/bash #定义脚本统计性别
declare -A sex #定义关联数组
while read line #line即是sex.txt中的文件内容
do
type=`echo $line|awk '{print $2}'` #把sex.txt中得内容第二行拿出来
let sex[$type]++ #统计m,f的数量,sex数组索引值进行相加,是f就是+1,是m就是+1,当第二个m或者f出现时就是1+1=2,这样就统计出来了人数。
done < sex.txt
for i in ${!sex[@]}
do
echo "$i : ${sex[$i]}"
done