【shell编程】shell数组

正文

数组

shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 value2 ... valuen)

Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

关联数组使用 declare 命令来声明,语法格式如下:

declare -A array_name

A 选项就是用于声明一个关联数组。关联数组的键是唯一的。

以下实例我们创建一个关联数组 site,并创建不同的键值:

declare -A site=(["google"]="www.google.com" ["runoob"]="www.facebook.com" ["taobao"]="www.youtube.com")

我们也可以先声明一个关联数组,然后再设置键和值:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

也可以在定义的同时赋值:

访问关联数组元素可以使用指定的键,格式如下:

array_name["index"]

1. 示例:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo ${site["runoob"]}

输出:www.runoob.com

遍历数组:

    my_array=(A B "C" D)
    echo "第一个元素为: ${my_array[0]}"
    echo "第二个元素为: ${my_array[1]}"
    echo "第三个元素为: ${my_array[2]}"
    echo "第四个元素为: ${my_array[3]}"

 

array=( A B C D 1 2 3 4)
    
echo "1.标准的for循环"
for(( i=0;i<${#array[@]};i++)) 
do
   #${#array[@]}获取数组长度用于循环
   echo ${array[i]};
done;

 

    echo "2.1 遍历(不带数组下标)"
    for element in ${array[@]}
    #也可以写成for element in ${array[*]}
    do
        echo $element
    done

 

    echo "2.2 遍历(带数组下标)"
    for i in "${!array[@]}";   
    do 
        printf "%s\t%s\n" "$i" "${array[$i]}"  
    done

 

   echo "3.While循环法"
   i=0  
   while [ $i -lt ${#array[@]} ]  
   #当变量(下标)小于数组长度时进入循环体
   do  
        echo ${array[$i]}  
        #按下标打印数组元素
        let i++  
   done

 

遍历数组:

# demo01.sh
my_array=(A B "C" D)
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

输出:

数组的元素为: A B C D
数组的元素为: A B C D

数组的长度:

#!/bin/bash

my_array=(A B "C" D)
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

输出:

数组元素个数为: 4
数组元素个数为: 4

当代码太多,不知道数组有多少时,我们可以通过追加的方式插入数据:

数组添加元素

  • 定义一个空数组变量a:a=(
  • 现在数组变量a的值是空的,添加一个新元素b:方法:数组变量[数组变量长度]=需要添加的元素,数组变量长度=${#变量名[*]}
    a[${#a[*]}]=b #添加完毕
  • 查看数组变量的值:echo ${a[*]} # 输出b

 

arr=(abc 000 def 123)
echo "原始数据: ${arr[@]}"
 
# 向数组arr追加元素
arr+=("value1")
arr+=("value2" "value3")
echo "增加数据: ${arr[@]}"

1. 实例

# demo01.sh
#!/bin/bash
cwd=$(cd $(dirname $0); pwd)

function main()
{
    echo "shell 数组介绍"
    echo "1.读取数组元素值的一般格式,例如:"
    my_array=(A B "C" D)
    echo "第一个元素为: ${my_array[0]}"
    echo "第二个元素为: ${my_array[1]}"
    echo "第三个元素为: ${my_array[2]}"
    echo "第四个元素为: ${my_array[3]}"
    
    echo "2.获取数组中的所有元素: 使用@ 或 * 可以获取数组中的所有元素,例如:"
    my_array=(A B "C" D)
    echo "数组的元素为: ${my_array[*]}"
    echo "数组的元素为: ${my_array[@]}"
  
    echo "3.获取数组的长度: 获取数组长度的方法与获取字符串长度的方法相同,例如:"
    my_array=(A B "C" D)
    echo "数组元素个数为: ${#my_array[*]}"
    echo "数组元素个数为: ${#my_array[@]}"
 
    echo "***************************************"
    echo "shell 数组遍历的3种方法"
    echo "创建一个数组"
    array=( A B C D 1 2 3 4)
    
    echo "1.标准的for循环"
    for(( i=0;i<${#array[@]};i++)) do
        #${#array[@]}获取数组长度用于循环
        echo ${array[i]};
    done;
 
    echo "2.for … in"
    echo "2.1 遍历(不带数组下标)"
    for element in ${array[@]}
    #也可以写成for element in ${array[*]}
    do
        echo $element
    done
 
    echo "2.2 遍历(带数组下标)"
    for i in "${!array[@]}";   
    do 
        printf "%s\t%s\n" "$i" "${array[$i]}"  
    done
   
   echo "3.While循环法"
   i=0  
   while [ $i -lt ${#array[@]} ]  
   #当变量(下标)小于数组长度时进入循环体
   do  
        echo ${array[$i]}  
        #按下标打印数组元素
        let i++  
   done
    
   echo "4.我的示例"
 
   pos=0
   array=( 20200630 20210731 20200831 )
   for element in ${array[@]}
   do
      end_date=$element
      start_date="${element: 0: 6}01"
      let pos++
      echo "序号: echo ${pos}, start_date: ${start_date}, end_date: ${end_date}"
   done 
}

main $@

输出:

 

参考资料

posted @   苏格拉底的落泪  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2021-05-23 【docker】docker安装与卸载
点击右上角即可分享
微信分享提示