shell 数组和算法教程

2021-08-01 18:35:15

Shell 数组和算法

一、数组

1、数组的定义方法

  • 使用括号包含数组中的元素,每个元素都有自己的下标索引,下标起始值为 0,数组中元素可以为数组或字符创等
方法一:
数组名=(value0 value1 value2 ...)

方法二:
数组名=([0]=value  [1]=value  [2]=value ...)

方法三:
列表名=“value0  value1  value2 ...”
数组名=($列表名)

方法四:
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"

①、方法一

============================================================================================================================================================================================================================================================================================================================================================================

②、方法二

③、方法三

④、方法四

2、数组包括的数据类型

  • 数值类型
  • 字符类型(字符串):使用“x”或 'x'定义,防止元素当中有空格,元素按空格分割

3、获取数组长度

arr_number=(1 2 3 4 5)
arr_length=${#arr_number[*]}
           ${#arr_number[@]}

4、获取数据列表

echo ${arr_number[*]}
echo ${arr_number[@]}

5、读取某下标赋值

arr_index2={arr_number[2]}
echo $arr_index2

6、数组遍历

#!/bin/bash
arr_number=(1 2 3 4 5)
for i in ${arr_number[@]}
do
echo $i
done

7、数组切片

arr=(1 2 3 4)
echo ${arr[@]}      #输出整个数组

echo ${arr[@]:0:2}        #获取 ${数组名[@或*]:起始下标位置:长度}的值
echo ${arr[@]:1:3}
echo ${arr[@]:2:3}

8、数组替换

arr=(1 2 3 4 5)

echo ${arr[@]/4/66}   # ${数组名[@或*]/查找字符/替换字符}
echo ${arr[@]}           # 并不会替换数组原因内容

arr=(${arr[@]/4/66})#要实现改变原有数组,可通过重新赋值实现
echo ${arr[@]}

9、数组删除

arr=(1 2 3 4 5)
unset arr               #删除数组
echo ${arr[*]}

arr=(1 2 3 4 5)
unset arr[n]          #删除第n个元素
echo ${arr[*]}

10、数组追加元素

方法一:按照下标进行单个添加
array_name[index]=value

方法二:在不做任何删减时,直接使用数组长度追加元素
array_name[${#array_name[@]}]=value

方法三:直接获取源数组的全部元素再加上新要添加的元素,一并重新赋予该数组,重新刷新定义索引
array_name=("${#array_name[@]}" value1 value2 ... valueN)

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

方法四:待添加元素必须用“()”包围起来,并且多个元素用空格分隔
array_name+=(value1 value2 ... valueN)

注:待添加元素必须用“()”包围起来,并且多个元素用空格分隔

(1)、方法一:按照下标进行单个添加

(2)、方法二:直接使用数组长度向后添加元素

11、向函数传数组参数

变量的第一个值。 
test1(){
     echo "接收到的参数列表∶ s@" 
     newarrary= ($1)
     echo "新数组的值为∶ ${newarrary [*]}"
}

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

解决这个问题则需要将数组变量的值分解成单个的值,然后将这些值作为函数参数使用。在函数内部,再将所有的参数重新组合成一个新的数组变量。 <br></br>test2 (){
    newarrary= ($ (echo $@))
    echo "新数组的值为∶ ${newarrary [*]}"

}
array=(3 2 1 4 5)
echo "原始数组的值为∶ s{array[*]}" 
test2 ${array[*] }

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »