shell编程基础教学之数组

数组

  • 一、定义数组的方法
    • 1.1 方法一
    • 1.2 方法二
    • 1.3 方法三
    • 1.4 方法四
  • 二、数组包括的数据类型
  • 三、获取数组长度
  • 四、读取某索引(下标)赋值
  • 五、数组遍历
  • 六、数组切片
  • 七、数组替换
  • 八、数值删除
    • 8.1 数组删除
    • 8.2 字符删除
  • 九、数组追加元素
  • 十、 向函数传数组参数
  • 十一、从函数返回数组

一、定义数组的方法

1.1 方法一

数组名=(数值1 数值2 数值3… …数值n)
示例:
在这里插入图片描述
数组中一个数值就是一个元素
方法一从第一个元素到最后一个元素都会默认一个索引(或称为下标)
从0开始,即第一个元素默认为0,第二个元素默认为1… …以此类推
如图所示:

在这里插入图片描述

1.2 方法二

数组名=([0]=数值1 [1]=数值2 [2]=数值3… …)
示例:
shell编程基础教学之数组_第1张图片
方法二相当于给数值指定索引,此方法的优点在于可以跳过某个索引,后面还可以使用跳过的索引插入数值

1.3 方法三

列表名=“数值1 数值2 数值3… …数值n”
数组名=($列表名)

示例:
shell编程基础教学之数组_第2张图片

1.4 方法四

数组名[索引号]=“数值1”
数组名[索引号]=“数值2”
数组名[索引号]=“数值3”

示例:
shell编程基础教学之数组_第3张图片
方法二中跳过的索引可以用此方法重新赋值

二、数组包括的数据类型

  • 数值类型
  • 字符类型:
  • 使用" "或’ '定义

三、获取数组长度

数组长度 ${数组名[*]}
数组长度 ${数组名[@]}

在这里插入图片描述

四、读取某索引(下标)赋值

echo ${数组名[索引]}
shell编程基础教学之数组_第4张图片

五、数组遍历

shell编程基础教学之数组_第5张图片
shell编程基础教学之数组_第6张图片

六、数组切片

echo ${数组名[*或@]:索引起始位置:索引的数量}
shell编程基础教学之数组_第7张图片

七、数组替换

方法一:
echo ${数组名[*或@]/查找字符/替换字符}
shell编程基础教学之数组_第8张图片

注:方法一只是临时替换,如想永久替换可通过方法二重新赋值来实现
方法二:
数组名=(${数组名[*或@]/查找字符/替换字符})
shell编程基础教学之数组_第9张图片

八、数值删除

8.1 数组删除

unset 数组名
shell编程基础教学之数组_第10张图片

8.2 字符删除

unset 数组名[索引]
shell编程基础教学之数组_第11张图片
注:被删除的数组对应的索引还在,只不过没有对应的数值了

九、数组追加元素

方法一:
数组名[索引]=元素
shell编程基础教学之数组_第12张图片
方法二:
数组名[${#数组名[*或者@]}]=元素
shell编程基础教学之数组_第13张图片

此方法再添加之前数组要是连续的,不能有空着的序列

方法三:

数组名=("${数组名[@]}"元素1 元素2… …)
shell编程基础教学之数组_第14张图片
shell编程基础教学之数组_第15张图片

双引号不能省略,否则,当数组中存在包含空格的元素时会按空格将元素拆分成多个
不能将"@"替换为"*",如果替换为"*",不加双引号时与"@"的表现一致,加双引号时,会将数组中的所有元素作为一个元素添加到数组中

方法四:
数组名+=(元素1 元素2 元素3… …)
shell编程基础教学之数组_第16张图片

十、 向函数传数组参数

test1() {
newshuzu=($(echo $@))
   echo "新数组的值为:${newshuzu[*]}"

}

shuzu=(2 3 5 1 6)
echo "原始数组的值为:${shuzu[*]}"
test1 ${array[*]}

shell编程基础教学之数组_第17张图片
在这里插入图片描述

十一、从函数返回数组

test2() {
newshuzu=(`echo $@`)                   #将数组传入函数,$@表示将每个元素分开输出"3" "2" "1" "4" "5"
sum1=0 
for sum2 in ${newshuzu[*]}             #for循环来求新数组newshuzu的和,,in可以以空格分隔数组中的元素进行提取
do
sum1=$[$sum1 + $sum2]                  #求元素和
done
echo $sum1                             #输出元素之和(即result1)
}
test3 () { 
newshuzu=(`echo $@`)                   #将数组传入函数,$@表示将每个元素分开输出"3" "2" "1" "4" "5"
for ((i=0;i<=$[$# - 1];i++))           #$#表示新数组元素的总个数,因为这边的i同时也表示数组的索引号,所以要减1,即[0][1][2][3][4]   
 do    
newshuzu[$i]=$[${newshuzu[$i]}*2]      #表示将新数组的每个元素 *2形成新的元素值
 done
echo ${newshuzu[*]}                    #输出 *2后的数组,即result2
}
shuzu=(3 2 1 4 5)
echo "原始数组的值为: ${shuzu[*]}"
result1=`test2 ${shuzu[*]}`            #调用test2函数
echo "新数组的和为: $result1"
result2=`test3 ${shuzu[*]}`            #调用tset3函数
echo "新数组的值为: $result2"

shell编程基础教学之数组_第18张图片
在这里插入图片描述

你可能感兴趣的:(shell脚本,字符串,shell,数组,centos,linux)