【shell脚本里的数组】

news2024/10/7 12:18:29

目录

  • 一、数组的定义方法
    • 1、定义数组
      • 1.1、使用shell脚本来写出怎么查看这个数组有没有缺少元素
      • 1.2、使用shell脚本,来生成数组
      • 1.3、元素的切片
  • 二、数组追加元素
  • 三、传输和传出
    • 1、向函数传入数组的值
    • 2、从函数返回数组


一、数组的定义方法

20  10  60  50  70 )   #以空格相间隔的数组
   0   1   2   3   4      #下标

1、定义数组

方法一:
数组名=( 元素1 元素2 元素3 ...)

方法二:
数组名=[0]=1 [1]=2 [2]=3 ...)
#每个元素的下标所对应的值

方法三:
列表名=“ 值123 ...”
数组名=($列表名)

方法四:
数组名[0]="值1"
数组名[1]="值2"
数组名[2]="值3"
数组名[3]="值4"

数组包括的数据类型
数值类型
字符串类型: 使用字符类型时要使用 “ ” 或者 ’ ’来定义

 1、获取数组的所有元素的列表
$(数组名[*]) 或者 $(数组名[@])
  
2、获取数组的所有元素下标
${!数组名[@]}   ${!数组名[*]}    

3、统计数组的元素的长度和个数
${#数组名[*]}
${#数组名[@]}

4、获取数组的某个元素的值
${数组名[下标]}
   
5、删除数组某个元素
unset  数组[下标]  

6、删除数组
unset  数组          

7、数组切片,获取从数组的某个下标开始的多少个元素
${数组[@]:下标:长度}    


8、数组字符替换
${数组[@]/旧字符/新字符}   

在这里插入图片描述

怎么查看数组里有没有缺少元素值:
就使用总元素数量减去1,用减1的数值来查看是不是与最后一个元素值一样,一样就是没有缺少元素值,反之不一样就是缺少元素值

在这里插入图片描述

1.1、使用shell脚本来写出怎么查看这个数组有没有缺少元素

#!/bin/bash
#定义数组名和数组里面的值,来查看有没有缺少元素
array3=([0]=30 [1]=20 [2]=10  [3]=40 [5]=50 [4]=60)

length=${#array3[@]}
lastnum=$[length - 1]
lastone=${array3[$lastnum]}
curlast=$(echo ${array3[@]} | awk '{print $NF}') 
  #print $NF  显示最后一个字段 


echo "array3数值的数为: ${array3[@]}"

if [ $lastone -eq $curlast  ]
then
     echo "array3数组是完整的"
else
     echo "array3数组是缺少元素的"
fi

在这里插入图片描述

1.2、使用shell脚本,来生成数组

#!/bin/bash

a=0
for i in 10 20 30 40 50    #指定数组里,每个的值
do
   array5[$a]=$i
   let a++
done

echo ${array5[@]}

算出元素的总和值
在这里插入图片描述

1.3、元素的切片

[root@dz666 ~]# echo ${array4[@]}   
11 22 33 44 55
[root@dz666 ~]# echo ${array4[@]:1:3}  
#先跟上数组的列表的表达式:初始元素的下标:获取的长度
22 33 44

替换元素值

[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55
[root@dz666 ~]# echo ${array4[@]/33/88}
11 22 88 44 55
[root@dz666 ~]# echo ${array1[@]}
10 30 40 50
[root@dz666 ~]# echo ${array1[@]/0/8}
 #匹配到的字符串全都替换掉
 18 38 48 58

实现永久替换
重新赋值

[root@dz666 ~]# echo ${array1[@]}
10 30 40 50
[root@dz666 ~]# array1=(${array1[@]/10/60})
在数组外加上一个括号来进行替换
[root@dz666 ~]# echo ${array1[@]}
60 30 40 50

unset 来删除组和

[root@dz666 ~]# echo ${!array1[@]}
0 1 2 3
[root@dz666 ~]# unset array1[3]  
 #删除数组某个元素
[root@dz666 ~]# echo ${!array1[@]}
0 1 2

[root@dz666 ~]# unset array1    
#删除数组
[root@dz666 ~]# echo ${!array1[@]}

[root@dz666 ~]# 

二、数组追加元素

方法一:
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55
[root@dz666 ~]# array4[5]=66
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55 66

方法二:
[root@dz666 ~]# array4[${#array4[@]}]=77
#根据数组的长度来判断,只针对完整的数组来执行
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55 66 77

方法三:
#双引号不能省略,否则,当数组array name中存在包含空格的元素时会按空格将元素拆分成多个
不能将"@"替换为"*",如果替换为"*",不加双引号时与"@"的表现一致,加双引号时,会将数组array中的所有元素作为一个元素添加到数组中

[root@dz666 ~]# array2=('zhang san' 'li si' 'wang wu' 'wo long' )
[root@dz666 ~]# echo ${array2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#array2[@]}
4
[root@dz666 ~]# arr2=(${array2[@]})
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#arr2[@]}
8      
#不加上引号的话就会将一个空格为一个值,拆分为多个元素


[root@dz666 ~]# arr2=("${array2[*]}")
 #如果这里面写如星号时,下面的数组就会作为一个整体
 
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#arr2[@]}
1

#使用@时就会显示全部的元素值
[root@dz666 ~]# arr2=("${array2[@]}")
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#arr2[@]}
4

#直接在后面加上要加的元素值
[root@dz666 ~]# arr2=("${array2[@]}" "fengchu" "nb" "haohen")
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long fengchu nb haohen
[root@dz666 ~]# echo ${#arr2[@]}
7
[root@dz666 ~]# 

方法四:
[root@dz666 ~]# echo ${array2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#array2[@]}
4

#使用 数组+= 直接在后面添加元素
[root@dz666 ~]# array2+=("nitaihenl" "taibangl")
[root@dz666 ~]# echo ${array2[@]}
zhang san li si wang wu wo long nitaihenl taibangl
[root@dz666 ~]# echo ${#array2[@]}
6

三、传输和传出

1、向函数传入数组的值

如果将数组变量作为函数参数,函数只会取数组变量的第一个值

#!/bin/bash


test1() {
   #函数内通过$@能获取到调用函数时后面跟的所有参数,加上()可在函数内组成新的数组
   newarr=($@) 

#对函数内组成的新数组处理后,按照元素列表格式输出,在函数题外调用函数的表达式外加上()再组成新的数组
   echo "函数内的数组的元素列表为: ${newarr[@]}"

}

###main###

#调用函数时后面跟的参数为数组的元素列表表达式
arr=(10 20 30 40 50 )
echo "函数外的数组的元素列表为: " ${arr[@]}
test1 ${arr[@]}

在这里插入图片描述

2、从函数返回数组

#!/bin/bash
#定义函数
array() {
  #将调用函数后的所有参数定义为newarr
   newarr=($@)
  #下标i的范围从0开始,小于参数的个数。下标最大为数组参数个数减1
   for ((i=0;i<${#newarr[@]};i++))
   do
       newarr[$i]=$[${newarr[$i]} * 2]
      #将原有数组的值乘2
   done
#将处理过的值进行输出
 echo ${newarr[@]}
}
 
###main###
 
read -p "输入一个数组:" num
#将调用函数后输出的值定义为一个新数组arr,设置新的数组时要在数组外加上括号成为新数组
arr=($(array $num))
echo "新数组的值为${arr[@]}"

在这里插入图片描述

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

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

相关文章

零基础入门人工智能学习路线:数学、编程、机器学习、深度学习和实践项目

如果你想开始学习人工智能&#xff0c;但是对于如何开始感到困惑&#xff0c;那么这里有一些零基础入门学习路线的建议&#xff0c;可以帮助你更好地理解和掌握人工智能的基础知识。 数学基础 作为人工智能的核心基础&#xff0c;数学知识是必不可少的。尤其是线性代数和概率论…

线性结构-链表

链表也是一种常用的线性数据结构&#xff0c;与数组不同的是&#xff0c;链表的存储空间并不连续&#xff0c;它是用一组地址任意的存储单元来存放数据的&#xff0c;也就是将存储单元分散在内存的各个地址上。 这些地址分散的存储单元叫做链表的节点&#xff0c;链表就是由一个…

亲测好用|甲方、专家和领导,用三维模型汇报方案如何投其所好?

身为设计方的你&#xff0c;有没有这样的经历&#xff1a; ➤ 一个非常优秀的方案未能被甲方采纳&#xff0c;反而甲方选择了一个不如自己的方案&#xff0c;造成了很大的遗憾&#xff1b; ➤ 在讲述自己的设计方案的时候&#xff0c;经常越说越散&#xff0c;甚至到了最后自…

ACM - 搜索与图论 - 基础(搜索 + 拓扑 + 最小生成树 + 最短路 + 二分图 + 欧拉路 + 最大流 + 其它)

搜索与图论 一、搜索1、分治矩阵二分 / 普通二分 模板万能二分模板 2、DFS例题1、AcWing 842. 排列数字例题2、AcWing 843. n-皇后问题 3、BFS例题1、AcWing 844. 走迷宫 (入门经典)例题2、到达 "12345678x"&#xff1a;AcWing 845. 八数码 二、图论写在前面1、图的存…

自学软件测试,从10K到40K的技术路线,也就是这些东西...

如果有一天我从梦中醒来时&#xff0c;发现自己的几年自动化测试工程师经验被抹掉&#xff0c;重新回到了一个小白的状态。我想要重新自学自动化测试&#xff0c;然后找到一份自己满意的测试工作&#xff0c;我想大概只需要6个月的时间就够了&#xff0c;如果比较顺利的话&…

Cursor--一款强大的国内智能AI语言模型(据说对接了chatgpt4)

简介 Cursor是一个集成了 GPT-4 的国内直接可以访问的&#xff0c;优秀而强大的免费代码生成器&#xff0c;可以帮助你快速编写、编辑和讨论代码。 它支持多种编程语言&#xff0c;如 Python, Java, C#, JavaScript 等&#xff0c;并且可以根据你的输入和需求自动生成代码片段…

eSIM证书要求-涉及规范SGP.22-SGP.26-1

文档 Official Document SGP.22 – RSP Technical Specification v2.4 Official Document SGP.26 - RSP Test Certificates Definition &#xff0c;包含官方测试证书 证书链的定义 三个曲线 为了便于互操作性&#xff0c;本规范仅限于以下三个曲线 AlgorithmIdentifier算法标…

英飞凌的AURIX TC4x系列芯片在汽车控制器上应用

英飞凌的AURIX TC4x系列微控制器--智能汽车安全的领导者来了! 汽车市场上出现了重大的颠覆者&#xff1a; 汽车E/E架构微控制器&#xff08;MCU&#xff09;在领域和区域控制方面的创新 加速从传统动力系统到xEV的转变 安全性和自动驾驶的提高。 英飞凌的AURIX TC4x系列解…

yolov5 8系列 labelme数据标注 并生成训练数据集

yolov5 8系列 labelme数据标注 数据集生成终极教程 一.数据集准备二.转换为yolo 数据集 一.数据集准备 创建一个data 文件夹在data文件夹下创建一个images 文件夹将所有图片数据放入images文件夹下 使用labelme标注数据 python环境下使用 pip install labelme 安装labelme在c…

边缘计算盒子要怎么选?

选择边缘计算盒子需要考虑以下几个因素&#xff1a; 性能需求&#xff1a;边缘计算盒子的性能应该与您的应用需求相匹配。如果需要处理大量数据或者部署多种复杂ai算法&#xff0c;那么就需要选择更高性能的盒子。 IVP06A边缘计算盒子是基于RV1126设计的一款支持深度智能边缘…

Makefile基础教程(条件判断语句)

文章目录 前言一、条件判断语句概念讲解1.ifeq 和 ifneq2.ifdef 和 ifndef3.ifeq 的比较操作符 二、条件判断语句的使用三、条件判断语句使用的注意事项四、条件判断语句只在预处理阶段有效总结 前言 本篇文章开始讲解Makefile中的条件判断语句&#xff0c;在各种编程语言中都…

远程桌面连接可以传文件么?

远程桌面连接是一种远程管理计算机的方式。它允许用户通过网络远程控制其他计算机。远程桌面连接可以用于各种目的&#xff0c;例如从远程地方访问办公室电脑、支持远程用户、教育、游戏等等。但是&#xff0c;在使用远程桌面连接时&#xff0c;用户可能会遇到一些问题&#xf…

8. 类的静态成员

一、对象的生产期 生存期&#xff1a;对象从诞生到结束的这段时间生存期分为静态生存期和动态生存期 1.1 静态生存期 对象的生存期与程序的运行期相同&#xff0c;则称它具有静态生存期在文件作用域中声明的对象都是具有静态生存期的若在函数内部的局部作用域中声明具有静态…

配置Windows终端像Linux终端一样直接执行Python脚本

配置Windows终端像Linux终端一样直接执行Python脚本 1. 将Python加入环境变量2. 将Python后缀加入环境变量PATHEXT中3. 修改Python脚本的默认打开方式4. *将Python脚本命令加入环境变量*5. 测试 在Linux系统中&#xff0c;在Python脚本的开头指定Python解释器路径&#xff0c;即…

Terry部落简介

通过一个简单的服务&#xff0c;整理使用的技术 服务简介 Terry部落&#xff0c;基于目前主流 Java Web 技术栈&#xff08;SpringBoot MyBatis-plus MySQL Redis Kafka Elasticsearch shiro …&#xff09;实现的个人博客服务。包含登陆、注册、文章发布、资源发布、鉴…

ACM - 数学 - 提高(还没学多少)

ACM - 数学 练习题 一、数论1、分解质因数 &#xff1a;AcWing 197. 阶乘分解2、求约数个数&#xff08;1&#xff09;AcWing 1294. 樱花 &#xff08;求 n&#xff01;约数个数之和&#xff09;&#xff08;2&#xff09;AcWing 198. 反素数 &#xff08;求 1 ~ N 中约数最多的…

human-NeRF 代码运行环境完全打包(根据照片视频生成三维模型)

包含模型和可以直接运行的数据的代码环境&#xff08;window环境&#xff0c;linux应该也可以运行&#xff09;&#xff0c;下载链接放在文章最后&#xff0c;不需要你自己再去下载任何的代码和模型了。 下载后输入三行命令在命令行界面即可将代码跑起来&#xff1a; pip insta…

C++14:AVL树

由于二叉搜索树在某些特定的情况下会退化成单叉树,为了解决这个问题&#xff0c;保证二叉搜索树能在绝大多数情况下保持高速搜索&#xff0c;G.M. Adelson-Velsky和E.M. Landis这两位俄国数学家提出了AVL树的概念&#xff0c;也就是高度平衡的搜索二叉树。 AVL树平衡大体逻辑&…

ACM - 数据结构 - 基础(数组模拟链表 / 栈 / 队列 + 字典树 + 并查集 + 堆 + 哈希)

数据结构 一、线性表1、单链表模板题&#xff1a;AcWing 826. 单链表 2、双链表模板题 AcWing 827. 双链表 3、栈数组模拟栈模板 AcWing 828. 模拟栈逆波兰简版模板例题1、逆波兰表达式&#xff1a;HDU 1237 简单计算器&#xff08;写得有点复杂&#xff09; 4、队列数组模拟队…

接口自动化测试可以使用的几个常用的框架

接口自动化测试可以使用以下几个常用的框架&#xff1a; 1、pytest pytest是一个用于Python编写单元测试和功能测试的框架。它提供了简洁的语法、灵活的扩展性和丰富的插件&#xff0c;可以帮助开发人员高效地编写测试用例&#xff0c;并快速定位和解决问题。 以下是pytest的…