shell 数组和算法教程
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[*] }