[Linux] shell脚本的函数和数组
一、函数
1.1 函数的定义
函数是脚本的别名
作用:函数可以避免代码重复,可读性强,可以简化脚本。
格式:函数名(){脚本}
1.2 如何使用函数
1.定义
2.调用
函数一定要先定义再使用
例子:
错误示例


正确示例

1.3 函数文件
专门存放函数的文件
要使用的时候
. 或者绝对路径的文件名 放在脚本的最前面
1.4 函数变量的作用范围
用法:加local 关键字(加locao只会在函数内部生效,不影响外界环境)

1.5 函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
使用原则:
-
函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
-
退出码必须是0-255,超出的值将为除以256取余

例子

1.6 函数的传递参数

1.7 函数的递归
实际应用就是阶乘
实验:
#!/bin/bash
fact () {
if [ $1 -eq 1 ]
then
echo 1
else
echo $[ $1 * `fact $[$1-1]` ] //如果输入的数不是1那么就用这个数乘以他本身减去一,如此循环,直到1
fi}
fact $1


二、数组
2.1 数组的类别
数组分为普通数组和关联数组
普通数组:下标是数字关联数组:下标是与含义的字符串
declare -a 数组名
#普通数组可以不事先声明,直接使用
declare -A 数组名
#关联数组必须先声明,再使用
2.2 声明数组
1.数组名=(数组值,中间用空格隔开)
2.数组名[下表1]=数值1
例子:
普通数组


关联数组
2.3 删除数组
普通数组

关联数组
2.4 数组切片
格式
${数组名[@]:跳过个数:要取个数}

2.5 进阶:冒泡排序
提出问题:假如我有一个随机数的数组我想让他从小到大排列,该怎么做
#!/bin/bash
for i in {0..9}
do
a[$i]=$RANDOM
done
echo "原始数组为: ${a[*]}"
#随机生成一个数组
l=${#a[*]}
#定义l的长度为数组a 10
for ((i=1;i<$l;i++))
#比较的轮数
dofor ((j=0;j<$l-$i;j++))
#两个相邻的数需要比较的轮数dofirst=${a[$j]}
#数组的第一个数k=$[$j+1]
#计算下一个数的角标second=${a[$k]}
#数组的第二个数if [ $first -gt $second ]thentemp=$firsta[$j]=$seconda[$k]=$tempfidone
done
echo "排序后的数组为: ${a[@]}"

总结:
1. 注意在函数内传递参数与通过位置变量在函数外传递参数的区别(函数传递由脚本变量的位置决定)。
2. 注意函数中局部变量和全局变量的区别。
3.在接收位置变量的值时,建议给出一个新定义的变量,以增加代码的可读性。
4.对递归函数的理解是对函数的深入运用和挖掘,尤其是递归方面的运用。
5.注意需要保持函数的脚本形式也可以在文件中构建函数库,另外调用文件的第一条语句要调用源代码或". "。
6. 如何构建数组(我们可以将其视为包含多个独立元素的变量集合)。
相关文章:
[Linux] shell脚本的函数和数组
一、函数 1.1 函数的定义 函数是脚本的别名 作用:函数可以避免代码重复,可读性强,可以简化脚本。 格式:函数名(){脚本} 1.2 如何使用函数 1.定义 2.调用 函数一定要先定义再使用 例子:…...
万宾科技智能井盖的效果怎么样?
日常出行过程中,人们最不想看到交通拥堵或者道路维修等现象,因为这代表出行受到影响甚至会导致不能按时赴约等。所以城市路面的安全和稳定,是市民朋友非常关心的话题。骑行在路上的时候,如果经过井盖时发出异常声响,骑…...
nvm切换版本之后npm用不了
原因是 nvm只给你安了对应的node没给你安装对应的node版本的npm 解决办法如下 1找到你安装的node版本号 然后去官网下载对应的版本包 这个网址就是node官网的版本列表 Index of /download/release/ 2下载后解压 把根目录这俩复制到自己的nvm安装目录下 还有那个node_modul…...
【elementui】el-popover在列表里循环使用,取消的doClose无效解决办法
目录 一、需求效果二、代码详情html方法接口 一、需求效果 在使用elementui的Popover 弹出框时,需求是在table列表里使用,循环出来,无法取消。 二、代码详情 html <el-table-column v-if"checkPermission([admin,user:resetPass…...
postgresql安装fdw扩展
最近有同一个服务器不同数据库、不同服务器数据库之间的数据同步需求,使用了fdw 下面举例的是同一个服务器两个不同数据库的同步情况 1、安装扩展 create extension postgres_fdw; 在需要使用fdw的数据库都加上该扩展 2、创建fdw服务器 mlhbase_prd库 CREATE…...
反爬虫机制与反爬虫技术(二)
反爬虫机制与反爬虫技术二 1、动态页面处理与验证码识别概述2、反爬虫案例:页面登录与滑块验证码处理2.1、用例简介2.2、库(模块)简介2.3、网页分析2.4、Selenium准备操作2.5、页面登录2.6、模糊移动滑块测试3、滑块验证码处理:精确移动滑块3.1、精确移动滑块的原理3.2、滑…...
Grails 启动
Grails系列 Grails项目启动 文章目录 Grails系列Grails一、项目创建二、可能的问题1.依赖下载2.项目导入到idea失败3.项目导入到idea后运行报错 Grails Grails是一款基于Groovy语言的Web应用程序框架,它使用了许多流行的开源技术,如Spring Framework、…...
2023年亚太地区数学建模大赛 问题A
采果机器人的图像识别技术 中国是世界上最大的苹果生产国,年产量约为3500万吨。与此同时,中国也是世界上最大的苹果出口国,全球每两个苹果中就有一个,全球超过六分之一的苹果出口自中国。中国提出了一带一路倡议(BRI&…...
基于springboot实现校园在线拍卖系统项目【项目源码】
基于springboot实现校园在线拍卖系统演示 Javar技术 JavaScript是一种网络脚本语言,广泛运用于web应用开发,可以用来添加网页的格式动态效果,该语言不用进行预编译就直接运行,可以直接嵌入HTML语言中,写成js语言&…...
详解ES6的Promise
ES6(ECMAScript 6)是JavaScript的一种标准,也被称为ES2015。它是在2015年发布的第六个ECMAScript标准版本,引入了许多新的语法和特性来增强JavaScript的功能和可读性。 文章目录 一、创建promise 二、处理Promise 三.Promise链…...
多语言快速排序算法
快速排序是一种高效的排序算法,使用分治法策略。它的基本思想是:选择一个元素作为“基准”(pivot),重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的摆在基准的后面。在这个分…...
opencv-图像梯度
目标 • 图像梯度,图像边界等 • 使用到的函数有:cv2.Sobel(),cv2.Schar(),cv2.Laplacian() 等 原理 梯度简单来说就是求导。 OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Schar…...
linux centos7 安装nginx
1、添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm2、安装nginx sudo yum install -y nginx3、启动nginx sudo systemctl start nginx.service开机自动启…...
Xilinx Zynq-7000系列FPGA实现视频拼接显示,提供两套工程源码和技术支持
目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA视频拼接叠加融合方案推荐 3、设计思路详解Video Mixer介绍 4、工程代码1:2路视频拼接 HDMI 输出PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程代码2:4路视频拼接 HDMI 输出PL 端 FPGA 逻辑设…...
DAOS低时延与高性能RDMA网络
什么是RDMA RDMA(Remote Direct Memory Access)远程直接内存访问是一种技术,它使两台联网的计算机能够在主内存中交换数据,而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样,…...
城市管理实景三维:打造智慧城市的新引擎
城市管理实景三维:打造智慧城市的新引擎 在城市管理领域,实景三维技术正逐渐成为推动城市发展的新引擎。通过以精准的数字模型呈现城市真实场景,实景三维技术为城市决策提供了全新的思路和工具。从规划设计到交通管理,从环境保护到…...
Python3.11+Pyside6开发电影下载程序
VideoSave是一款使用Python3.11Pyside6编写的提供下载电影/电视剧的软件,支持注册、登录、搜索、下载、查看日志等功能,提供了Window、Mac系统安装包。 先上效果图 提供功能 节省寻找资源的时间 ⌚️模糊搜索指定影片 🐴查看影片下载日志 &…...
HCIP-七、IS-IS 综合实验
七、IS-IS 综合实验 实验拓扑实验需求及解法1.如图所示,配置所有路由器的接口IP地址。2.运行IS-IS,进程号13.IS-IS优化4.路径优化 实验拓扑 实验需求及解法 本实验模拟IS-IS综合网络,完成以下需求: 1.如图所示,配置所…...
广西桂林钢结构钣金折弯件3d扫描全尺寸偏差检测-CASAIM中科广电
钣金是一种针对金属薄板(通常在6mm以下)的综合冷加工工艺,包括剪、冲/切/复合、折、焊接、铆接、拼接、成型(如汽车车身)等,其显著的特征就是同一零件厚度一致,通过钣金工艺加工出的产品叫做钣金…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

