Shell之(数组)

news2024/9/22 15:43:23

目录

一、shell数组

1.数组的定义

2.定义数组的方法

第一种

 第二种

第三种 

第四种  

3.数组分片

4. 数组字符替换

临时替换 

永久替换 

5.删除数组  

 删除指定的下标

删除整组 

6.数组遍历和重新定义 

7.数组追加元素

方式一:指定位置添加

方法二: 末尾追加元素

方式三:进行末尾多元素追加

方法四:直接末尾追加多元素且格式最为简单 

8.用函数判断数组是否完整 

9. Shell向函数传数组参数

 10.Shell从函数返回数组 

二.数组排序算法(拓展)

1.冒泡排序

2.直接选择排序

3.反转排序


一、shell数组

1.数组的定义

由多个元素之间以空格分隔的元素组成
数组的元素可使用的数据类型可以是:数字 或 “字符串” / ’字符串‘;元素存在下标等于n-1.

2.定义数组的方

第一种
数组名=(值1  值2  值3  ... )

以空格间隔,如果值为字符类型,需要加单引号或双引号
[root@localhost ~]# a=(1 2 3 4 5 6)
[root@localhost ~]# echo ${a[@]}
1 2 3 4 5 6
[root@localhost ~]# echo ${a[*]}       # @和*作用都一样查看数组全部
1 2 3 4 5 6
[root@localhost ~]# echo ${a[0]}       # 通过下标查看具体值
1
[root@localhost ~]# echo ${a[1]}
2
[root@localhost ~]# echo ${a[2]}
3
[root@localhost ~]# 

 查看下标

  • [root@localhost ~]# echo ${!a[*]}      # !显示下标
    0 1 2 3 4 5
    

获取元素长度

  • [root@localhost ~]# echo ${#a[*]}        # 添加#显示长度
    6


 第二种
 
2.数组名=([0]=值 [1]=值 [2]=值 ...)

第三种 
列表名="value0 value1 value2 ..."
 
数组名=($列表名)

第四种  
数组名 [0]="value"
 
数组名 [1]="value"
 
数组名 [2]="value" 
echo ${z[*]}   #所有元素展开
echo ${#z[*]}  #查看长度
echo ${!z[*]}  #查看下标

 

3.数组分片

echo ${数组名[@]:下标:长度}
 
echo ${数组名[*]:下标:长度}

echo ${z[*]:1:2}   2:保留几位
           1:从指定下标开始

4. 数组字符替换

临时替换,字符串替换而不是替换元素组内容

echo ${数组名[@]/旧字符/新字符}
 
数组名=(${数组名[*]/旧字符/新字符})        通过重新定义的方式实现永久替换
 

 

临时替换 
echo ${数组名[*]/被替换的字符或字段/新的字符或字段} 

 

永久替换 
数组名=(${数组名[*]/旧字符/新字符})

5.删除数组  

根据下标删除某个下标和删除整个数组

unset 数组名[下标]                删除数组的某个下标
 
unset 数组名                     删除数组

 删除指定的下标

 

删除整组 

6.数组遍历和重新定义 

zz=(2 4 6 8 10)
n=0
for i in ${zz[@]}
do
    arr[$n]=$[i*2]
    let n++
done

7.数组追加元素

方式一:指定位置添加
数组名[新下标]=新元素
方法二: 末尾追加元素
格式: 数组名[${#数组名[*]}] =新元素   或     数组名[${#数组名[@]}] =新元素

方式三:进行末尾多元素追加
数组名=("${数组名[@]}" 新元素1 新元素2 ....)
方法四:直接末尾追加多元素且格式最为简单 
数组名=("${数组名[@]}" 新元素1 新元素2 ....) 

8.用函数判断数组是否完整 

#!/bin/bash
#判断一个数组是否完整
array1=(10 20 30 40 50 60)
array3=([0]="a" [1]="b" [2]="c" [3]="d" [5]="f")
 
#获取数组长度
length1=${#array1[@]}
length3=${#array3[@]}
 
#获取长度n - 1 的下标
last1=$[length1 - 1]
last3=$[length3 - 1]
 
#获取数组最后一个元素下标
last1_num=$(echo ${!array1[@]} | awk '{print $NF}')
last3_num=$(echo ${!array3[@]} | awk '{print $NF}')
 
#判断长度n - 1 的下标 是否与 数组最后一个元素下标 相同
if [ $last1 -eq $last1_num ];then
     echo "array1 数组完整"
else
     echo "array1 数组不完整"
fi
 
if [ $last3 -eq $last3_num ];then
     echo "array3 数组完整"
else
     echo "array3 数组不完整"
fi

 

函数名() {
     数组2=($@)         #在函数体内将传入的列表重新组成数组
     ....
}
 
函数名 ${数组1[@]}      #在函数体外将数组分解成列表传入
 

9. Shell向函数传数组参数

函数名() {
     数组2=($@)         #在函数体内将传入的列表重新组成数组
     ....
}
 
函数名 ${数组1[@]}      #在函数体外将数组分解成列表传入
 

 10.Shell从函数返回数组 

函数名(){
    ....
    echo ${数组2[@]}     #在函数体内以列表形式返回值
}
 
数组1=(函数名 参数)      #在函数体外将函数执行的结果重新组合成数组

 

二.数组排序算法(拓展)

1.冒泡排序

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

基本思想

冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到

数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部

 

算法思路

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因

为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用

于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少

 

2.直接选择排序

与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些。

基本思想:
将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

实操 

3.反转排序

概述

以相反的顺序把原有数组的内容重新排序

基本思想

把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所

有数组元素反转替换

实操↓

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

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

相关文章

【JAVA入门】Day05 - 面向对象

【JAVA入门】Day05 - 面向对象 文章目录 【JAVA入门】Day05 - 面向对象一、对象的设计和使用1.1 类和对象1.2 类的分类 二、封装三、private 关键字四、this 关键字五、构造方法六、JavaBean七、对象的内存图7.1 一个对象的内存图7.2 两个对象的内存图7.3 两个引用指向同一个对…

文心一言 VS 讯飞星火 VS chatgpt (252)-- 算法导论18.2 5题

五、因为叶结点无需指向孩子结点的指针,那么对同样大小的磁盘页面,可选用一个与内部结点不同的(更大的) t 值。请说明如何修改 B 树的创建和插人过程来处理这个变化。如果要写代码,请用go语言。 文心一言: 当我们在B树&#xff…

低空经济:无人机竞赛详解

无人机竞赛市场近年来呈现出蓬勃发展的态势,其市场价值不仅体现在竞赛本身,还体现在推动无人机技术创新、拓展应用场景以及促进产业链发展等多个方面。 一、比赛项目介绍 无人机竞赛通常分为多个项目,包括竞速赛、技巧赛、航拍赛等。每个项目…

slugify,slug格式转换工具

目录 前言 安装 特性 基本功能 生成简单的Slug 处理特殊字符 Unicode支持 高级功能 自定义替换规则 过滤停用词 使用不同的分隔符 处理多种语言 实际应用场景 网站和博客的SEO优化 电子商务平台的产品链接 数据清洗和预处理 总结 前言 在Web开发中,生成易于…

vm 虚拟机 Debian12 开启 root、ssh 登录功能

前言,安装的时候语言就选中文就好了。选择中文,在安装的时候就可以选择国内 163 的源。 开启 ssh 功能 先提权,用 root 账户 su安装 ssh 安装 ssh-server apt install openssh-server启动 ssh systemctl start ssh查看 ssh 状态 systemctl st…

景源畅信电商:做抖音有哪些未开发的蓝海领域?

在互联网信息爆炸的今天,抖音已经成为人们获取信息和娱乐的重要渠道。然而,随着用户数量的增加和内容的丰富,抖音的红海竞争也日益激烈。在这样的背景下,寻找还未被充分开发的蓝海领域,对于内容创作者来说,…

yolov8 模型架构轻量化 | 极致降参数量

模型轻量化加速是深度学习领域的重要研究方向,旨在减小模型的体积和计算复杂度,从而提高在资源受限设备上的运行效率,模型参数量在轻量化加速中扮演着至关重要的角色。 首先,模型参数量直接决定了模型的复杂度和存储空间需求。随…

西南大学计算机考研,选学硕还是专硕?西南大学计算机考研考情分析!

西南大学(Southwest University)是教育部直属,教育部、农业农村部、重庆市共建的重点综合大学,是国家首批"双一流"建设高校,"211工程"和"985工程优势学科创新平台"建设高校。现任党委书…

JVM学习-虚拟机栈

虚拟机栈 每个线程创建时都会创建一个虚拟机栈,其内部保存一个个栈帧,对应一次次Java方法调用,栈是线程私有的。 生命周期: 与线程相同 作用 主管Java程序的运行,它保存方法的局部变量、部分结果、并参与方法的调用和返回。 …

【Linux】系统登录,调用shell,shell配置文件,shell命令,特殊符号,shell快捷键,Linux运行级别,解决无限登录问题,修改提示符

目录 Linux系统的登录方式 以及 调用shell Linux shell 以及 shell配置文件 shell 命令 shell 特殊符号 shell 快捷键 Linux操作系统运行级别 单用户模式下解决无限登录问题 centos7修改命令行提示符 PS1 补充、centos7没有滚动条 Linux系统的登录方式 以及 调用shell…

怎样让猫给啥吃啥?生骨肉冻干拌粮哪有猫咪不吃的!

随着科学养猫的普及,生骨肉冻干喂养越来越受欢迎,生骨肉冻干喂养对猫的好处很多,它符合猫咪的天性,可以提供全面的营养,保持牙齿和牙龈的健康,还有助于维持健康的消化系统。然而,许多猫主人在选…

构建智能化不动产管理系统:数字化引领未来房地产行业发展

随着城市化进程的不断推进和房地产市场的持续发展,不动产管理系统的重要性日益凸显。在这一背景下,构建智能化不动产管理系统成为推动房地产行业数字化转型的关键举措。本文将深入探讨智能化不动产管理系统的构建与优势,助力房地产企业把握数…

深入剖析Tomcat(八) 载入器与打破双亲委派机制的自定义类加载器

写这篇文章让我头大了好几天,书中描述的内容倒是不多,可能也是那会Tomcat的现状。如今Tomcat发展了好多代,加上springboot的广泛应用,导致现在的类加载的步骤和Tomcat资料中描述的大相径庭。可能也是由于微服务的发展,…

Linux 第三十四章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

五丰黎红引领新营销模式:布局一物一码数字化营销,提高调味品销量和复购率

调味品行业的销售渠道主要有餐饮、家庭消费和食品加工,按销售额的占比约为6:3:1,餐饮行业是调味品行业的供需主力。在餐饮行业中,“大厨”这一角色具有十分重要的地位。因此,借助大厨的力量成为了许多调味品…

HCIP【VLAN综合实验】

目录 一、实验拓扑图: 二、实验要求: 三、实验思路: 四、实验步骤: 1、在交换机SW1,SW2,SW3配置VLAN和各个接口对应类型的配置 2、在路由器上面配置DHCP服务 一、实验拓扑图: 二、实验要求: 1、PC1 …

MT2057 门票

思路: 此题是求有多少个区间的平均值>t, 那么可以把每个值-t。如果新的数列的某个区间的和>0,那么说明这个区间满足条件。 令新数列的前缀和为b[i],所以求[i, j]区间是否满足条件,即求b[j]-b[i-1]是否>0&am…

基于SSM的婚恋网站的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的婚恋网站的设计与实现(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spri…

SpringBoot上传文件到服务器(跨服务器上传)

目录 (一)上传文件到本地(windows) (二)上传文件到linux服务器 (三)跨服务器上传文件 (一)上传文件到本地(windows) 1.新建一个文件…

程序员兼职引起的纠纷?

最近跟朋友聊天,说遇到一些因兼职工作而引发的争议,因为我本人也曾涉足过兼职领域,因此对程序员兼职时可能遇到的各种情况和应遵循的“套路”准则还有有一些发言权的,所以想和大家聊聊如何安全“兼职”的1/2事项~ ✅顺便内推个机会…