变量和数组的区别
变量:用一个固定的字符串,代替一个不固定字符串
数组:用一个固定的字符串,代替多个不固定字符串
普通数组,只能使用整数作为数组索引,数字型索引
关联数组,可以使用字符串作为数组索引,文字型索引
declare -a 数组名 //声明,普通数组可以不声明,不声明的情况下默认是普通数组
数组名=(变量值 变量值 变量值) //多个变量值用空格隔开,索引默认从0开始顺序排列
数组名=( [索引]=变量值 [索引]=变量值 [索引]=变量值 ) //自定义索引定义变量
declare -A 数组名 //关联数组需要提前声明
数组名=( [索引]=变量值 [索引]=变量值 [索引]=变量值 ) //关联数组的索引是字符类型
echo ${数组名[索引]} //数组取值,取符合索引的值
echo ${数组名[@]} //列出所有的元素
echo ${!数组名[@]} //获取所有元素的下标
echo ${#数组名[@]} //获取元素的个数
索引存在是更改变量,索引不存在是新增变量
数组名[索引]="变量值" //在数组中增加元素
数组名[索引]="变量值" //修改数组中的某个值
unset 数组名[索引] //删除数组中的某个元素
echo ${数组名[@]:开始索引:步长} //对数组进行切片处理
echo ${array1[@]:1:2} 从数组下标1开始,访问两个元素
@: : //@后的数值第一个起点,第二个步长
declare -A 数组名 //声明
数组名=([0,1]=变量值 [0,2]=变量值 ) //[索引,索引]=变量值,定义多维数组
echo ${数组名[@]} //显示数组所有元素
echo ${数组名[0,2]} //调用数组某一个元素
当设置任何数组变量时,可以访问它
数组名=(haha heihei baibai)
echo ${数组名[0]} //访问数组中的第一个元素
echo ${数组名[@]} //访问数组中所有的元素,等同与echo ${数组名[*]}
echo ${#数组名[@]} //统计元素的个数
echo ${!数组名[@]} //统计索引
${数组名[索引]}
//引用
//++i是先自加1后赋值;i++是先赋值后自加1。
#!/bin/bash
//循环读取文件,定义数组
while read line
do
//hosts:数组名
//[++i]:索引递增,++i是1开始,i++是0开始
//$line:值,即文件中的内容
hosts[++i]=$line
done < /etc/hosts //输入重定向是对while做
//输出索引每一行
for i in ${!hosts[@]}
do
echo "$i:${hosts[$i]}"
done
#!/bin/bash
IFS=' ' //shell里面的一个环境变量,设置读取文件时的分隔符
for line in `cat /etc/hosts` //读取文件中的每一行
do
host[j++]=$line
done
for i in ${!host[@]}
do
echo ${host[i]}
done
IFS是for循环取值时字符串之间的分隔符
例:IFS=$'\n' //for循环取值时,空格取值改为换行符取值
while每次取一行
for每次取一块,空格隔开