Fork me on GitHub

Shell脚本学习(3)

引言 

  数组是一种特殊的数据结构,即一个由若干同类型变量组成的集合。其中的每一项被称为一个元素。数组均由连续的存储单元组成,最低地址对应数组的第一个元素,最高地址对应最后一个元素。

  bash shell 只支持一维数组(不支持多维数组),并没有限定数组的大小。注意:bash shell所支持的最大数组标号为5999147937791

Shell 数组基本用法

  shell脚本中,用括号来标识数组,数组元素用空格符号分隔开。表示数组一般的形式为:数组名=(1 2 ... n)。其中,读取数组元素值的一般格式:${数组名[下标]}。

#!/bin/bash
# 数组初始化
array=(1 2 3 4 5)
echo "第1个元素为: ${array[0]}"
echo "第2个元素为: ${array[1]}"
echo "第3个元素为: ${array[2]}"
echo "第4个元素为: ${array[3]}"
echo "第5个元素为: ${array[4]}"

   上述例子,运行结果如下:

  在shell脚本中,数组的初始化有两种:用圆括号将一组值赋给数组和单独给数组每个元素或部分元素赋值。

 

#!/bin/bash
# 数组初始化
array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5
echo "第1个元素为: ${array[0]}"
echo "第2个元素为: ${array[1]}"
echo "第3个元素为: ${array[2]}"
echo "第4个元素为: ${array[3]}"
echo "第5个元素为: ${array[4]}"  

   上述例子,运行结果如下:

    

  使用@或*符号可以获取数组中的所有元素:${数组名[@]} 或者 ${数组名[*]}。

#!/bin/bash
# 数组初始化
array=(1 2 3 4 5)
echo "所有元素(array[@])为: ${array[@]}"
echo "所有元素(array[*])为: ${array[*]}"

  上述例子,运行结果如下:

 

  在shell数组中,获取数组长度的一般形式为:${#array_name[@|*]}。

#!/bin/bash
# 获取数组的长度
array[0]=A
array[1]=B
array[2]=C
array[3]=D
echo "数组元素个数为: ${#array[*]}"
echo "数组元素个数为: ${#array[@]}"

  上述例子,运行结果如下:

 

  shell 数组的抽取子串的一般形式为:${数组名[@|*]:n:m},其中n表示抽取的起始元素,m表示抽取的结束元素,若m省略,默认情况下抽取从起始位置元素开始到数组最后一个元素。其中,n为开始元素下标,m为结束元素下标。

#!/bin/bash
city=(Nanjing Atlanta Massachusetts Marseilles)          #建立一个简单的数组
echo "Extracting Substring"   
echo ${city[*]:0}                #抽取整个数组 
echo ${city[*]:1}               #抽取从第1个元素到结束的数组 
echo ${city[*]:3}               #抽取从第3个元素到结束的数组 
echo ${city[*]:0:2}             #抽取从第0个元素开始的2个元素 
echo 
echo "Removing Substring" #演示删除子串功能 echo ${city[*]#M*a} #删除从M到a的最短子串 echo ${city[*]##M*a} #删除从M到a的最长子串 echo
echo "Replcing Substring" #演示替换子串功能 echo ${city[*]/M*s/Year} #替换第1次与M*s匹配的子串 echo ${city[*]//M*s/Year}

  上述例子,运行结果如下:

  shell数组中,若要删除某个数组元素,即 unset 数组名[下标]。若要清空整个数组,即unset 数组名。

  shell数组中,模式替换的一般形式为:${数组名[@或*]/模式/新值}。

   shell数组在初始化后,很多情况,时常会碰到数组遍历的问题。在shell 数组中,遍历的一般形式如下:

for i in ${arr_number[@]}; 
do
   echo $i;
done

结束语

  通过shell数组的简单基本操作的使用,可以加强shell脚本的开发和应用。

 

posted @ 2019-02-04 00:00  lwei2  阅读(104)  评论(0编辑  收藏  举报