linux系统shell语言的数组定义与使用

2024-01-02 18:12:14

数组

变量和数组的区别
变量:用一个固定的字符串,代替一个不固定字符串
数组:用一个固定的字符串,代替多个不固定字符串

普通数组,只能使用整数作为数组索引,数字型索引
关联数组,可以使用字符串作为数组索引,文字型索引

数组定义

普通数组
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 ${!数组名[@]}   //统计索引

${数组名[索引]} //引用

循环定义数组

while遍历数组
//++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
for遍历数组
#!/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循环取值时,空格取值改为换行符取值
for循环遍历和while循环遍历的区别
while每次取一行
for每次取一块,空格隔开

文章来源:https://blog.csdn.net/qq_59207739/article/details/135343893
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。