🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# **一、数组基础** Shell的数组就是把有限个元素(变量或字符内容)用一个名字命名,然后用编号对它们进行区分的元素集合。这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量 数组也是一种变量变量,所以变量子串的相关功能数组也同样适用,数组下标默认是从0开始计数的。 > 数组的相关知识通过man bash然后搜Arrays来了解。 ## **1. 定义数组** ### 1) 静态命名数组 * 方法1[推荐] `array1=(1 2 3)` * 方法2 ``` array2=( www.baidu.com www.sina.com ) ``` * 方法3 `array=([0]=one [1]=two [2]=three [3]=four)` ### 2) 动态命令创建数组 ``` array=($(ls)) array=(`ls`) ``` ## **2. 打印数组** ### 1) 打印所有元素: ``` $(array[@]) $(array[*]) ``` ### 2) 打印数组长度: ``` $(#array[@]) $(#array[*]) ``` ### 3) 打印单个元素: `$(array[i])` ## **3. 增改数组数据** ### 1) 增改 ``` array[0]=one array[1]=two array[2]=three ``` 如果对应的下标值不存在,则新赋值,如果已存在,则会覆盖原值 ## **4. 删除数组数据** 因为数组本质上还是变量,因此可通过“unset 数组[下标]”清除相应的数组元素,如果不带下标,表示清除整个数组的所有数据。 ``` unset array[1] unset array ``` ## **5. 切片和替换[变量子串]** 数组也是变量,因此也适合于前面讲解过的变量的子串处理的功能应用。 ### 1) 切片功能 ``` array=(1 2 3 4 5) echo ${array[@]:1:3} ``` > 2 3 4 *从下标为1的元素开始截取,共取3个数组元素。其他用法参考变量子串的用法* ### 2) 替换 ``` array=(1 2 3 1 1) echo ${array[@]/1/b} ``` > b 2 3 b b 把数组中的1替换成b,原数组未被修改,和sed很像。其他用法参考变量子串的用法 调用方法是:`${数组名[@或*]/查找字符/替换字符}` 该操作不会改变原先数组 # **二、案例** ## **1. 内容打印数组元素个数** >* `array=(1 2 3 4 4) && echo ${array[@]}` 1 2 3 4 4 >* `echo ${#array[@]}` 5 >* `echo ${array[1]} ` 2 >>数组下标默认是从0开始计数的 ## **2. for循环打印数组** 用数组和for循环将“i am oldboy my teacher is luogang”这句话中,字符数小于等于6个的单词打印出来 * `cat /server/scripts/d1.sh ` ```shell #!/bin/bash array=(i am oldboy my teacher is luogang) for n in ${array[*]} do if [ `echo $n|wc -L` -le 6 ] then echo $n fi done echo ----------------- for((i=0;i<${#array[*]};i++)) do if [ ${#array[i]} -le 6 ] then echo ${array[i]} fi done ``` * sh /server/scripts/d1.sh ![执行结果](https://www.github.com/noah-luo/imags/raw/master/year/1544753130960.png)