shell脚本之数组

news2024/10/1 5:40:40

shell数组

数组和变量

变量:存储单个元素的内存空间
数组:存储多个元素的连续的内存空间,相当于多个变量的集合

数组和索引

索引的编号从0开始,属于数值索引
索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
bash的数组支持稀疏格式(索引不连续)

数组格式

数组类型: 普通数组
关联数组

普通数组
数组名=(value0  value1 value2 value3 ......)
a=(1 2 3 4 5)

数组名=([0]=value   [1]=value1  [2]=value2 ....)
 a=([0]="1" [1]="2" [2]="3" [3]="4" [4]="5")
 
列表名="value0  value1 value2 value3 ...... "
数组名($列表名)
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"

[root@localhost ~]list="1 2 3 4 5"
#先定义列表
[root@localhost ~]list1=($list)
#再定义数组
[root@localhost ~]echo ${list1[@]}
1 2 3 4 5

在这里插入图片描述

关联数组
declare -A age #declare -A 声明数组,关联数组需要声明
ages["Alice"]=25
ages["Bob"]=30
echo ${ages["Alice"]}  # 输出: 25
echo ${ages["Bob"]}    # 输出: 30

列出数组的参数

${数组名[*]}
${数组名[@]}
* 和 @ 都代表所有参数
zm=(a b c d e)
[root@localhost ~]echo ${zm[*]}   
a b c d e
[root@localhost ~]echo ${zm[@]}  
a b c d e

在这里插入图片描述

查看下标

输出的数组下标是从0开始的

a=(1 2 3 4 5 6)
[root@localhost ~]echo ${!a[*]}		#查看下标 
0 1 2 3 4 5

[root@localhost ~]echo ${a[0]}		#数组取值,数组和对应的下标
1

在这里插入图片描述

数组长度

获取数组长度
${#数组名[@]}
${#数组名[*]}

b=(11 22 33 44 55)
echo ${#b[@]}
echo ${#b[*]}

在这里插入图片描述

数组切片

数组切片:
获取 ${数组名[@或*]:起始位置:长度} 的值
[root@centos8 ~]num=({0..10})
[root@centos8 ~]echo ${num[*]:2:3}   #跳过前两个取三个
2 3 4
[root@centos8 ~]echo ${num[*]:6}	 #跳过前六个
7 8 9 10

在这里插入图片描述

数组替换

ag=(1 2 3 4 5)

echo ${ag[@]/4/111} 	#${数组名[@或*]/查找字符/替换字符}
echo ${ag[@]}			#并不会替换数组原有内容,要实现改变原有数组,可通过重新赋值实现

在这里插入图片描述

数组删除

arr=(5 4 3 2 1)
unset arr[2]			#删除下标为2的元素
echo ${arr[*]}

arr=(5 4 3 2 1)
unset arr				#删除数组
echo ${arr[*]}

在这里插入图片描述

数组遍历

#!/bin/bash
a=(1 2 3 4 5)
for i in ${a[@]}
do
echo $i
done

在这里插入图片描述

冒泡排序

冒泡排序
类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

基本思想:
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,
把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),
这样较小的元素就像气泡一样从底部上升到顶部。

算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,
一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,
同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,
对比和交换次数随排序轮数而减少。

最大数和最小数
#!/bin/bash
read -p "请输入正整数字,并已空格隔开:" num
a=( $num )

max=${a[0]}
for ((i=0;i<${#a[*]}-1;i++))
do
if [[ $max -lt ${a[$i+1]} ]]
then
max=${a[$i+1]}
fi
done
echo "最大值是$max"

min=${a[0]}
for ((i=0;i<${#a[*]}-1;i++))
do
if [[ $min -ge ${a[$i+1]} ]]
then
min=${a[$i+1]}
fi
done
echo "最小值是$min"

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA原理与结构——RAM IP核的使用与测试

目录 一、前言 二、RAM IP核定制 1、RAM IP核 step1 打开vivado工程&#xff0c;点击左侧栏中的IP Catalog step2 在搜索栏搜索RAM&#xff0c;找到Block Memory Generator IP核&#xff1a; 2、IP核定制 step3 Baisc界面定制 step4 端口定制 step5 Other Options st…

Shell脚本 六 :免交互

文章目录 1.免交互的概念1.1什么是免交互 2.多行重定向2.1标准格式2.2注意事项2.3示例 3. expect免交互 &#xff08;需要安装&#xff09;3.1定义3.2 安装3.3命令格式3.4 执行expect脚本3.5 expect相关命令3.5.1 脚本解释器3.5.2 spaw3.5.3 expect3.5.4 send3.5.5 结束符3.5.6…

Vue3 用父子组件通信实现页面页签功能

一、大概流程 二、用到的Vue3知识 1、组件通信 &#xff08;1&#xff09;父给子 在vue3中父组件给子组件传值用到绑定和props 因为页签的数组要放在父页面中&#xff0c; data(){return {tabs: []}}, 所以顶部栏需要向父页面获取页签数组 先在页签页面中定义props用来接…

AMBA总线协议(2)——AMBA信号

一、前言 在之前的文章中我们已经对AMBA总线协议进行了一个简单的介绍&#xff0c;这篇文章我们来详细介绍AHB,APB,AXI协议的信号。对于AMBA总线协议有一个初步直观的认识。 二、AMBA信号 所有 AMBA 信号的命名都用名称的第一个字母来指示信号和哪个总线相关联。信号名称中用一…

学习设计模式之装饰器模式,但是宝可梦

装饰模式 为了不改变组件的结构&#xff0c;动态地扩展其功能。 通常&#xff0c;扩展功能通过子类进行&#xff0c;但是继承的方式具有静态特征&#xff0c;耦合度高。 意图&#xff1a;动态地给对象添加额外的功能 主要解决&#xff1a;继承方式是静态特征&#xff0c;扩…

[国产MCU]-W801开发实例-GPIO输入与中断

GPIO输入与中断 文章目录 GPIO输入与中断1、硬件准备2、软件准备3、驱动实现4、驱动测试W801的GPIO支持软件配置中断,中断触发方式包含:上升沿触发、下降沿触发、高电平触发、低电平触发。本文在前面[ 国产MCU]-W801开发实例-按键与GPIO输入的基础上实现GPIO中断配置。 1、硬…

字节跳动推出免费域名DNS和公共DNS服务

近日&#xff0c;字节跳动旗下云计算服务火山引擎推出了 TrafficRoute DNS 套件&#xff0c;套件提供了从公网到私网、从递归到权威的全链路 DNS 服务以及基于 DNS 的流量调度服务&#xff0c;包含了云解析&#xff08;DNS&#xff09;、云调度&#xff08;GTM&#xff09;、私…

Linux:安全技术与防火墙

目录 一、安全技术 1.安全技术 2.防火墙的分类 3.防水墙 4.netfilter/iptables关系 二、防火墙 1、iptables四表五链 2、黑白名单 3.iptables命令 3.1查看filter表所有链 iptables -L ​编辑3.2用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.3 清空所有链…

宇宙原理:黑洞基础。

宇宙原理&#xff1a;黑洞基础TOC 黑洞的数理基础&#xff1a;一个由满数组成的数盘&#xff0c;经过自然演进&#xff0c;将会逐步稀疏化、最终会向纯数方案发展&#xff1b;纯数方案虽然只有{2}、无数&#xff08;虚拟&#xff09;、{0,1,2,3}&#xff08;虚拟&#xff09;、…

wustoj2007标准体重和身高的对应关系

#include <stdio.h> int main() {int n;double f;scanf("%d",&n);f(n-100)*0.9*2;printf("%.1lf",f);return 0;}

读发布!设计与部署稳定的分布式系统(第2版)笔记34_读后总结与感想兼导读

1. 基本信息 发布&#xff01;设计与部署稳定的分布式系统 第2版 Release It! Design and Deploy Production - Ready Software,Second Edition [美]迈克尔尼加德(MichaelT.Nygard) 人民邮电出版社,2020年1月出版 1.1. 读薄率 2版书籍总字数426千字&#xff0c;笔记总字数…

wustojc2011计算终止时间

#include <stdio.h> int main() {int n,m,a,b,c,d;scanf("%d%d",&n,&m);an%100;c0;bam;while(b>60&&b>0){bb-60;c;}while(b<0){bb60;c--;}dn/100c;if(d>24)dd-24;printf("%d%02d",d,b);return 0; }

【硬件设计】INA282电流采集电路

文章目录 1. 电流采集电路介绍1.1 电流采集电路是什么1.2 电流采集电路的作用和特点1.3 电流采集电路的应用场景 2. 电流采集芯片INA282AQDRQ12.1 INA282AQDRQ1特性和基本参数2.2 INA282AQDRQ1原理2.3 INA282AQDRQ1的注意事项 3. INA282单向电流采集电路4. INA282双向电流采集电…

计算机技术与软件专业技术资格(水平)考试----系统架构设计师

【原文链接】计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试----系统架构设计师 考试简介 计算机软件资格考试是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试。计算机软件资格考试既是职业资格考试&#xff0c;又是职称资格考试。考试合格…

vue3、react组件数据传值对比分析——父组件传递子组件,子组件传递父组件

文章目录 ⭐前言⭐react 组件传值实例&#x1f496;父组件传值给子组件&#xff08;props&#xff09;&#x1f496;子组件传递事件给父组件props绑定事件&#x1f496;父组件触发子组件的事件Ref ⭐vue3 组件传值实例&#x1f496; 父组件传递数据给子组件props&#x1f496; …

Transformer---ViT:vision transformer

记录一下对transformer方法在计算机视觉任务中的应用方法的理解 参考博客:https://blog.csdn.net/weixin_42392454/article/details/122667271 参考代码:https://gitcode.net/mirrors/Runist/torch_vision_transformer?utm_sourcecsdn_github_accelerator 模型训练流程: imp…

【数据结构与算法】克鲁斯卡尔算法

克鲁斯卡尔算法 介绍 克鲁斯卡尔&#xff08;Kruskal&#xff09;算法是用来求加权连通图的最小生成树的算法。基本思想&#xff1a;按照权值从小到大的顺序选择 n - 1 条边&#xff0c;并保证这 n - 1 条边不构成回路。具体做法&#xff1a;首先构造一个只含 n 个顶点的森林…

文本三剑客sed grep awk

目录 1、sed 1.1、基本用法 1.2、sed脚本格式 1.3、搜索与替换 1.4、变量 2、awk 2.1、基础用法 2.2、常见的内置变量 2.3、模式 2.4、判断 2.5、for计算 2.6、数组 3、grep 1、sed sed 即 Stream EDitor&#xff0c;和 vi 不同&#xff0c;sed是行编辑器 Sed是从…

leetcode刷题之283:移动零

问题 实现思路 首先, 将dest指向-1 位置, cur指向下标为0 的位置, 在cur遍历的过程中: 1) 遇到非零元素则与下标dest1 位置的元素交换, 2) 若遇到零元素则只继续cur遍历. 下标为1 的位置上是 非零元素 执行1) 交换得到右图结果 随后cur 得到下图结果 下标为2 的位置上是零…

day-27 代码随想录算法训练营(19)part03

78.子集 画图分析&#xff1a; 思路&#xff1a;横向遍历&#xff0c;每次遍历的时候都进行一次添加&#xff0c;然后进行纵向递归&#xff0c;递归完之后进行回溯。 注意&#xff1a;空集也是子集。 90.子集|| 分析&#xff1a;和上题一样&#xff0c;区别在于有重复数字 …