我们一起来学Shell - shell的数组

简介: 我们一起来学Shell - shell的数组

什么是数组

Shell 的数组就是把有限个元素(变量或字符内容)用一个名字命名,然后用编号对它们进行区分的元素集合。这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量。

有了Shell数组后,就可以用相同名字引用一系列变量及变量值,并通过数字(索引)来识别使用它们。

在许多场合,使用数组可以缩短和简化程序开发。

数组的本质还是变量,是特殊的变量形式

数组中常用变量

${ARRAY_NAME[INDEX]}      # 引用数组中的元素 注意:引用时,只给数组名,表示引用下标为0的元素
${#ARRAY_NAME[*]}         # 数组中元素的个数
${#ARRAY_NAME[@]}         # 数组中元素的个数
${ARRAY_NAME[*]}          # 引用数组中的所有元素
${ARRAY_NAME[@]}          # 引用数组中的所有元素
${#ARRAY_NAME}            # 数组中下标为 0 的字符个数

数组的定义

通过数组名[下标]对数组进行定义和赋值,如果下标不存在,自动添加新一个数组元素,如果下标存在就覆盖原来的值

删除数组和删除变量是一样的,使用unset即可

小括号定义数组变量

  • 用小括号将变量值括起来赋值给数组变量,每个变量值之间要用空格分隔
arry=(hello world)

输出数组的变量值

索引数组下标从数字0开始,0表示第一个变量值

小括号加键值对定义数组变量

arry=([3]=hello [4]=world)

输出数组的变量值

echo ${arry[@]}
echo ${arry[3]}
echo ${arry[4]}

指定数组下标,输出指定的变量值

分别定义数组变量

arry[0]=hello
arry[1]=world
arrys[0]=study
arrys[1]=shell

输出数组的变量值

echo ${arry[@]}
echo ${arrys[@]}

动态地定义数组变量

  • 使用命令的输出结果作为数组的内容
arry=($(ls /etc/ | head -n 5 ))

输出数组的变量值

echo ${arry[@]}

数组赋值的切片

#!/usr/bin/env bash
array=({a..z})
echo "数组的变量值为:${array[@]}"
echo "数组的变量值个数为:${#array[@]}"
echo "从第一个字符开始往后的五个字符的内容: ${array[@]:0:5}"
echo "从第六个字符开始往后的五个字符的内容: ${array[@]:5:5}"

结果如下

数组的变量值为:a b c d e f g h i j k l m n o p q r s t u v w x y z
数组的变量值个数为:26
从第一个字符开始往后的五个字符的内容: a b c d e
从第六个字符开始往后的五个字符的内容: f g h i j

数组的赋值删除、替换,与变量的赋值删除、替换的方式也是一样的,只是数组的变量值的书写方式不同,区别在于[@],这是数组输出所有变量值的方式

关于变量的赋值删除、替换,可以看我的另一篇博客()[01-我们一起来学Shell - shell的变量]

遍历数组

#!/usr/bin/env bash
array=(hello world welcome to study shell)
for (( i=0; i<${#array[@]}; i++ ))
do
    echo "for循环遍历数组方式一: ${array[i]}"
done
echo " "
for var in ${array[@]}
do
    echo "for循环遍历数组方式二: ${var}"
done
echo " "
i=2
while [[ $i < ${#array[@]} ]]
do
    echo "while循环遍历数组: ${array[i]}"
    let i++
done

结果如下

for循环遍历数组方式一: hello
for循环遍历数组方式一: world
for循环遍历数组方式一: welcome
for循环遍历数组方式一: to
for循环遍历数组方式一: study
for循环遍历数组方式一: shell
for循环遍历数组方式二: hello
for循环遍历数组方式二: world
for循环遍历数组方式二: welcome
for循环遍历数组方式二: to
for循环遍历数组方式二: study
for循环遍历数组方式二: shell
while循环遍历数组: welcome
while循环遍历数组: to
while循环遍历数组: study
while循环遍历数组: shell

while是当变量(数组下标)小于数组长度时进入循环体,所以,没有输出hello和world

关联数组

Bash 支持关联数组,它可以使用字符串作为数组索引,关联数组一定要事先声明才行,不然会按照索引数组进行执行

使用 declare -A 来定义一个关联数组

使用${!arry[@]}来获取数组的索引列表

#!/usr/bin/env bash
declare -A city_arry=([zhangsan]=ShangHai [lisi]=BeiJing [wangwu]=GuangZhou)
for CITY in ${!city_arry[@]}
do
    echo "${CITY} come from ${city_arry[${CITY}]}"
done

通过${!city_arry[@]}将索引输出给${CITY},再通过${city_arry[${CITY}]},循环输出变量值

结果如下

zhangsan come from ShangHai
lisi come from BeiJing
wangwu come from GuangZhou


目录
相关文章
|
5月前
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
|
8月前
|
Shell 索引
shell编程之数组
shell编程之数组
49 0
|
28天前
|
人工智能 机器人 Shell
【shell】shell数组的操作(定义、索引、长度、获取、删除、修改、拼接)
【shell】shell数组的操作(定义、索引、长度、获取、删除、修改、拼接)
|
7月前
|
Shell Linux PHP
|
7月前
|
Shell Linux PHP
|
5月前
|
存储 前端开发 JavaScript
shell(七)数组
数组可以存储多个数据,这个东西是很重要的,其他一些高级语言类似PHP、javascript等语言都是支持多维数组的。Shell编程只支持一维数组。 Shell编程的数组和PHP的数组类似,声明的时候不需要指定大小。也可以使用下标来访问数组中的元素。 Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
38 0
|
5月前
|
Shell PHP
Shell 数组
Shell 数组
21 0
|
7月前
|
Shell Linux PHP
|
7月前
|
Shell Linux PHP
|
7月前
|
Shell Linux PHP