【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.