Shell之(数组)

目录

一、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.反转排序

概述

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

基本思想

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

有数组元素反转替换

实操↓

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React: memo

React.memo 允许你的组件在 props 没有改变的情况下跳过重新渲染。 const MemoizedComponent memo(SomeComponent, arePropsEqual?)React 通常在其父组件重新渲染时重新渲染一个组件。你可以使用 memo 创建一个组件,当它的父组件重新渲染时,只要它的新…

阅读一些精华(老文献)

本文设置的初衷是诺贝尔化学奖得主Sir Fraser Stoddart说过:我们不能局限于最近几年的工作,而要往几十年前看,说不定因为之前的一些技术原因,导致当初的方法没有实现,现在可以实现了。 1.Variable-Rate Transmission f…

垃圾分类管理系统java项目

文章目录 垃圾分类管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 垃圾分类管理系统 一、项目演示 垃圾分类管理系统 二、项目介绍 系统角色:管理员、用户 1、登录、注册功能…

服务器之间实现免密码传输文件(scp免密传输)

问题:需要定时将本服务器的文件传输到指定服务器上作为备份 通过scp实现不同服务器之间的文件传输 正常使用scp传输文件 传输文件命令:scp /data/文件 root服务器地址:/指定目录 传输文件夹命令:scp -r /data/文件 root服务…

Unity与Andriod的交互

Unity与安卓的信息交互 这次分享的不同于传统的方式AndroidJavaClass("com.unity3d.player.UnityPlayer") 如果是新手的话,请看 交互新手教程 这里讲的是在Unity中调用java代码,或者在unity中传参到java中,在Java代码中运行。 以下…

css画三角形

使用border div {border-top: 50px solid yellowgreen;border-bottom: 50px solid deeppink;border-left: 50px solid bisque;border-right: 50px solid chocolate; }如果想要单个的三角形,把其它三边的颜色设为transparent即可 使用 conic-gradient 绘制三角形 …

ADS FEM 仿真设置

1、EM Simulator 选择FEM。 2、在layout界面打开的EM功能,这里不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建,过孔可以在叠层处右键添加。 5、端口需要设置GND layer。 6、设置仿真频率。 7、Output plan。 8、Options 设置 介质…

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

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

LeetCode494:目标和

题目描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 : 例如,nums [2, 1] ,可以在 2 之前添加 ‘’ ,在 1 之…

GPT-4o:全面深入了解 OpenAI 的 GPT-4o

GPT-4o:全面深入了解 OpenAI 的 GPT-4o 关于 GPT-4o 的所有信息ChatGPT 增强的用户体验改进的多语言和音频功能GPT-4o 优于 Whisper-v3M3Exam 基准测试中的表现 GPT-4o 的起源追踪语言模型的演变GPT 谱系:人工智能语言的开拓者多模式飞跃:超越…

优秀博士学位论文分享:复杂场景下高精度有向目标检测的研究

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平,本公众号近期将推出“优秀博士学位论文分享”系列文章,对人工智能领域2023年优秀博士学位论文进行介绍和分享,方便广大读者了解人工智能领域最前沿的研究进展。 “博士学位论…

牛客热题:二叉树与双向链表

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:二叉树与双向链表题目链接方法一…

【LInux】<基础IO> 文件操作 | 文件描述符 | 重定向

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

【easyX】动手轻松掌握easyX 1

01 简单绘图 在这个程序中&#xff0c;我们先初始化绘图窗口。其次&#xff0c;简单绘制两条线。 #include <graphics.h>//绘图库头文件 #include <stdio.h> int main() {initgraph(640, 480);//初始化640✖480绘图屏幕line(200, 240, 440, 240);//画线(200,240)…

NAT技术总结与双向NAT配置案例

NAT的转换方式&#xff1a; 1.静态转换&#xff1a;固定的一对一IP地址映射。 interface GigabitEthernet0/0/1 ip address 122.1.2.24 nat static global 122.1.2.1 inside 192.168.1.1 #在路由器出接口 公网地址 私网地址。 2.动态转换&#xff1a;Basic NAT nat address-gr…

centos7下使用docker安装fastdfs服务

先查看容器是否已经存在 docker ps -a 删除掉之前的tracker及storage服务 docker rm tracker docker rm storage 1、没有镜像先下载镜像 docker pull morunchang/fastdfs 2、运行服务 a、不指定物理服务器路径 docker run -d --name tracker --nethost morunchang/fastdfs sh…

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

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

AWS简介

AWS AWS&#xff0c;全称为Amazon Web Services&#xff0c;是亚马逊公司旗下的云计算服务平台&#xff0c;自2006年起向全球用户提供广泛而深入的云计算服务。AWS是全球最全面、应用最广泛的云平台之一&#xff0c;它从全球的数据中心提供超过200项功能齐全的服务&#xff0c…

每周一算法:恰好经过K条边的最短路

题目描述 牛站 给定一张由 M M M 条边构成的无向图&#xff0c;点的编号为 1 ∼ 1000 1\sim 1000 1∼1000 之间的整数。 求从起点 S S S 到终点 E E E 恰好经过 K K K 条边&#xff08;可以重复经过&#xff09;的最短路。 注意: 数据保证一定有解。 输入格式 第 1 …

维护表空间中的数据文件

目录 向表空间中添加数据文件 从表空间中删除数据文件 删除users表空间中的users02.dbf数据文件 对数据文件的自动扩展设置 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 维护表空间中的数据文件主要包括向表空间中添…