【shell】shell 数组处理

Shell 数组 | https://www.runoob.com/linux/linux-shell-array.html

极简

array_name=(value1 value2 ... valuen)

array_name[0]=value0

读取数组元素值:${array_name[index]}

获取所有元素:echo "数组的元素为: ${my_array[*]}"

获取元素个数:echo "元素个数为: ${#my_array[*]}"

key-value

declare -A  array_name

array_name["google"]="www.google.com"

array_name["index"]

获取数组的所有键:echo "键为: ${!site[*]}"

简述

Bash Shell 只支持一维数组(不支持多维数组)

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 value2 ... valuen)

也可以使用数字下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

读取数组元素值的一般格式是:
${array_name[index]}

关联数组

declare -A array_name
-A 选项就是用于声明一个关联数组。

关联数组的键是唯一的。

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

实例
declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")
我们也可以先声明一个关联数组,然后再设置键和值:

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

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

array_name["index"]

获取数组中的所有元素
使用 @ 或 * 可以获取数组中的所有元素
echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

获取数组长度的方法与获取字符串长度的方法相同
echo "数组的元素个数为: ${#my_array[*]}"
echo "数组的元素个数为: ${#my_array[@]}"

获取数组的所有键
echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"

shell 数组遍历的3种方法

  • 标准的for循环

  • for … in循环方法

  • While循环法

 
   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
 

遍历
cnt=${#my_array[@]}
for ((i=0;i < ${cnt};i++))
do
echo ${array_name[i]}
done
 

空数组

vim ./test.sh 

#!/bin/bash
#
arry2=(That sa non empty array)
array3=()
array4=('')
#
ARRAY()
{
echo "Element of arry2 is:${array2[@]}."
echo "Element of array3 is:${array3[@]}."
echo "Element of array4 is:${array4[@]}."
}

ARRAY

array3[0]="my"
array3[2]="u"

ARRAY

array4[5]=9
echo "len of array3 is:${#array3[@]}."
echo "Element of array4 is:${array4[@]}."
echo "len of array4 is:${#array4[@]}."

[root@localhost vmshare]# ./test.sh 


Element of arry2 is:.
Element of array3 is:.
Element of array4 is:.
Element of arry2 is:.
Element of array3 is:my u.
Element of array4 is:.
len of array3 is:2.
Element of array4 is: 9.
len of array4 is:2.
 

posted on 2022-10-04 01:21  bdy  阅读(50)  评论(0编辑  收藏  举报

导航