shell 数组定义与使用

news/2024/11/9 0:49:05/

一维数组

数组定义

array_name=(value1 value2 ... value)

也可以使用数字下表来定义数组

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

读取数组

${array_name[index]}
实例1
[root@iZj6c3slqbp8xuu2w3i4roZ devops]# cat array_name.sh 
#!/usr/bin/bashmy_array=(A B "C" D)echo "第1个元素为: ${my_array[0]}"
echo "第2个元素为: ${my_array[1]}"
echo "第3个元素为: ${my_array[2]}"
echo "第4个元素为: ${my_array[3]}"

执行脚本输出如下所示:

[root@iZj6c3slqbp8xuu2w3i4roZ devops]# bash array_name.sh 
第1个元素为: A
第2个元素为: B
第3个元素为: C
第4个元素为: D

使用@或者* 可以获取数组中的所有元素,例如

${array_name[*]}
${array_name[@]}

获取数组的长度

length=${#array_name[@]}
length=${#array_name[*]}

获取数组单个元素的长度

lengthn=${#array_name[index]}
实例2
[root@iZj6c3slqbp8xuu2w3i4roZ devops]# cat array_name.sh 
#!/usr/bin/bashmy_array=(A B "1234" D)echo "所有元素有: ${my_array[*]}"
echo "所有元素有: ${my_array[@]}"
echo "该数组长度: ${#my_array[@]}"
echo "该第3个元素长度为: ${#my_array[2]}"

执行脚本输出如下所示:

[root@iZj6c3slqbp8xuu2w3i4roZ devops]# bash array_name.sh 
所有元素有: A B 1234 D
所有元素有: A B 1234 D
该数组长度: 4
该第3个元素长度为: 4

关联数组

Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。关联数组使用 declare 命令来声明,语法格式如下:

declare -A array_name

-A 选项就是用于声明一个关联数组。
关联数组的键是唯一的。
一下实例我们创建一个关联数组 site,并创建不用的键值:

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

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

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

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

array_name["index"]
实例5

处理文本数据

cat node_info.txt 
p7-mzuofang-yxf-1       43.138.**.**
p7-mzuofang-yxf-2       1.**.52.6**[yingjian@VM-32-38-centos scripts]$ cat get_node_info.sh 
#!/usr/bin/bash
# Author: yingjian
# Date: 2023-5-5
# Version: v1.0node_yaml="node-info.yml"echo -n "" > $node_yaml#获取脚本目录
cd `dirname $0`
script_dir=`pwd`num=0while read line
doaccount=$lineaccounts[$num]=$account((num++))
#  echo $num
done < $script_dir/node_info.txt#echo ${accounts[@]}
len=${#accounts[@]}for((i=0;i<$len;i++))
dok=0var=${accounts[$i]}len_var=${#var[@]}for j in $vardovars[$k]=$j((k++))if [ "$k" -gt "$len_var" ];thencontinuefidoneecho "${vars[0]}"echo "${vars[1]}"echo "- targets: ['${vars[1]}:9100']" >> $node_yamlecho "  labels:" >> $node_yamlecho "   nodename: \"${vars[0]}\"" >> $node_yaml
done

本文参考链接:https://www.runoob.com/linux/linux-shell-array.html


http://www.ppmy.cn/news/73920.html

相关文章

C++(4):表达式

表达式由一个或多个运算对象(operand)组成,对表达式求值将得到一个结果(result&#xff09;。字面值和变量是最简单的表达式&#xff08;expression)&#xff0c;其结果就是字面值和变量的值。把一个运算符&#xff08;operator)和一个或多个运算对象组合起来可以生成较复杂的表…

【TCP】对TCP三次握手的个人理解

三次握手 TCP 是面向连接的协议&#xff0c;所以使用 TCP 前必须先建立连接&#xff0c;而建立连接是通过三次握手来进行的。三次握手的过程如下图&#xff1a; 一开始&#xff0c;客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口&#xff0c;处于 LISTEN 状态 …

第三章 卷积神经网络

目录 一、CNN 基础二、CNN 进阶 卷积神经网络&#xff0c;Convolutinal Neural Network&#xff0c;CNN 在之前两章的由线性模型构成的神经网络都是全连接神经网络 一、CNN 基础 在之前全连接层处理二维图像的时候&#xff0c;直接将二维图像从 N 1 28 28 N \times 1 \t…

【学习记录】大数据课程-学习二十二周总结

5.3.分组 5.3.1.1.GROUP BY语句 GROUP BY语句通常会和聚合函数一起使用&#xff0c;按照一个或者多个列队结果进行分组&#xff0c;然后对每个组执行聚合操作。注意使用group by分组之后&#xff0c;select后面的字段只能是分组字段和聚合函数。 案例实操&#xff1a; &#…

git生成密钥方法

1、密钥生成 打开Git Bash&#xff0c;查看ls ~/.ssh下是否有密钥文件id_rsa*&#xff0c;有的话可先进行备份。 然后用如下命令生成新密钥&#xff1a; ssh-keygen -t rsa -C "your_emailexample.com" 参数含义&#xff1a; -t 指定密钥类型&#xff0c;默认是 …

【嵌入式烧录刷写文件】-2.4-移动Intel Hex中指定地址范围内的数据

案例背景&#xff08;共5页精讲&#xff09;&#xff1a; 有如下一段Hex文件&#xff0c;将源地址范围0x9100-0x9104中数据&#xff0c;移动至一个“空的&#xff0c;未填充的”目标地址范围0xA000-0xA004。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717…

js - 匿名函数和箭头函数理解

匿名函数和箭头函数 匿名函数1&#xff0c;基本概念2&#xff0c;匿名函数的应用场景 箭头函数1&#xff0c;基本概念箭头函数写法的特殊性 2&#xff0c;箭头函数的特点箭头函数this总是指向父级的this&#xff1a; 扩展 匿名函数 1&#xff0c;基本概念 匿名函数顾名思义指…

【华为OD机试真题2023B卷 JAVA】五子棋迷

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 五子棋迷 知识点数组双指针 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 张兵和王武是五子棋迷,工作之余经常切磋棋艺。这不,这会儿又下起来了。走了一会儿,轮张兵了,对着一条线思考起来了,这条线上的…