当前位置: 首页 > news >正文

[Linux] shell脚本的函数和数组

一、函数

1.1 函数的定义

函数是脚本的别名

作用:函数可以避免代码重复,可读性强,可以简化脚本。

格式:函数名(){脚本}

1.2  如何使用函数

1.定义

2.调用

函数一定要先定义再使用

例子:

错误示例

正确示例 

1.3 函数文件

专门存放函数的文件
要使用的时候
. 或者绝对路径的文件名 放在脚本的最前面 

 1.4 函数变量的作用范围

用法:加local 关键字(加locao只会在函数内部生效,不影响外界环境)

 1.5 函数的返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

使用原则:

  1. 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码

  2. 退出码必须是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 函数的定义 函数是脚本的别名 作用&#xff1a;函数可以避免代码重复&#xff0c;可读性强&#xff0c;可以简化脚本。 格式&#xff1a;函数名&#xff08;&#xff09;{脚本} 1.2 如何使用函数 1.定义 2.调用 函数一定要先定义再使用 例子&#xff1a…...

万宾科技智能井盖的效果怎么样?

日常出行过程中&#xff0c;人们最不想看到交通拥堵或者道路维修等现象&#xff0c;因为这代表出行受到影响甚至会导致不能按时赴约等。所以城市路面的安全和稳定&#xff0c;是市民朋友非常关心的话题。骑行在路上的时候&#xff0c;如果经过井盖时发出异常声响&#xff0c;骑…...

nvm切换版本之后npm用不了

原因是 nvm只给你安了对应的node没给你安装对应的node版本的npm 解决办法如下 1找到你安装的node版本号 然后去官网下载对应的版本包 这个网址就是node官网的版本列表 Index of /download/release/ 2下载后解压 把根目录这俩复制到自己的nvm安装目录下 还有那个node_modul…...

【elementui】el-popover在列表里循环使用,取消的doClose无效解决办法

目录 一、需求效果二、代码详情html方法接口 一、需求效果 在使用elementui的Popover 弹出框时&#xff0c;需求是在table列表里使用&#xff0c;循环出来&#xff0c;无法取消。 二、代码详情 html <el-table-column v-if"checkPermission([admin,user:resetPass…...

【php】解决加载速度慢导出超时问题记录

...

postgresql安装fdw扩展

最近有同一个服务器不同数据库、不同服务器数据库之间的数据同步需求&#xff0c;使用了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应用程序框架&#xff0c;它使用了许多流行的开源技术&#xff0c;如Spring Framework、…...

2023年亚太地区数学建模大赛 问题A

采果机器人的图像识别技术 中国是世界上最大的苹果生产国&#xff0c;年产量约为3500万吨。与此同时&#xff0c;中国也是世界上最大的苹果出口国&#xff0c;全球每两个苹果中就有一个&#xff0c;全球超过六分之一的苹果出口自中国。中国提出了一带一路倡议&#xff08;BRI&…...

基于springboot实现校园在线拍卖系统项目【项目源码】

基于springboot实现校园在线拍卖系统演示 Javar技术 JavaScript是一种网络脚本语言&#xff0c;广泛运用于web应用开发&#xff0c;可以用来添加网页的格式动态效果&#xff0c;该语言不用进行预编译就直接运行&#xff0c;可以直接嵌入HTML语言中&#xff0c;写成js语言&…...

详解ES6的Promise

ES6&#xff08;ECMAScript 6&#xff09;是JavaScript的一种标准&#xff0c;也被称为ES2015。它是在2015年发布的第六个ECMAScript标准版本&#xff0c;引入了许多新的语法和特性来增强JavaScript的功能和可读性。 文章目录 一、创建promise 二、处理Promise 三.Promise链…...

多语言快速排序算法

快速排序是一种高效的排序算法&#xff0c;使用分治法策略。它的基本思想是&#xff1a;选择一个元素作为“基准”&#xff08;pivot&#xff09;&#xff0c;重新排序数列&#xff0c;所有比基准值小的元素摆放在基准前面&#xff0c;所有比基准值大的摆在基准的后面。在这个分…...

opencv-图像梯度

目标 • 图像梯度&#xff0c;图像边界等 • 使用到的函数有&#xff1a;cv2.Sobel()&#xff0c;cv2.Schar()&#xff0c;cv2.Laplacian() 等 原理 梯度简单来说就是求导。 OpenCV 提供了三种不同的梯度滤波器&#xff0c;或者说高通滤波器&#xff1a;Sobel&#xff0c;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&#xff1a;2路视频拼接 HDMI 输出PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程代码2&#xff1a;4路视频拼接 HDMI 输出PL 端 FPGA 逻辑设…...

DAOS低时延与高性能RDMA网络

什么是RDMA RDMA&#xff08;Remote Direct Memory Access&#xff09;远程直接内存访问是一种技术&#xff0c;它使两台联网的计算机能够在主内存中交换数据&#xff0c;而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样&#xff0c…...

城市管理实景三维:打造智慧城市的新引擎

城市管理实景三维&#xff1a;打造智慧城市的新引擎 在城市管理领域&#xff0c;实景三维技术正逐渐成为推动城市发展的新引擎。通过以精准的数字模型呈现城市真实场景&#xff0c;实景三维技术为城市决策提供了全新的思路和工具。从规划设计到交通管理&#xff0c;从环境保护到…...

Python3.11+Pyside6开发电影下载程序

VideoSave是一款使用Python3.11Pyside6编写的提供下载电影/电视剧的软件&#xff0c;支持注册、登录、搜索、下载、查看日志等功能&#xff0c;提供了Window、Mac系统安装包。 先上效果图 提供功能 节省寻找资源的时间 ⌚️模糊搜索指定影片 &#x1f434;查看影片下载日志 &…...

HCIP-七、IS-IS 综合实验

七、IS-IS 综合实验 实验拓扑实验需求及解法1.如图所示&#xff0c;配置所有路由器的接口IP地址。2.运行IS-IS&#xff0c;进程号13.IS-IS优化4.路径优化 实验拓扑 实验需求及解法 本实验模拟IS-IS综合网络&#xff0c;完成以下需求&#xff1a; 1.如图所示&#xff0c;配置所…...

广西桂林钢结构钣金折弯件3d扫描全尺寸偏差检测-CASAIM中科广电

钣金是一种针对金属薄板&#xff08;通常在6mm以下&#xff09;的综合冷加工工艺&#xff0c;包括剪、冲/切/复合、折、焊接、铆接、拼接、成型&#xff08;如汽车车身&#xff09;等&#xff0c;其显著的特征就是同一零件厚度一致&#xff0c;通过钣金工艺加工出的产品叫做钣金…...

基于微信小程序的驾校预约平台(文档+源码)_kaic

第5章 系统实现进入到这个环节&#xff0c;也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中&#xff0c;是会帮助系统编制人员节省时间&#xff0c;并提升开发效率的。所以在系统的编程阶段&#xff0c;也就是系统实现阶段&#xff0c;对于…...

完整网页截图终极指南:如何一键保存超长网页的完美副本

完整网页截图终极指南&#xff1a;如何一键保存超长网页的完美副本 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-exte…...

TMSpeech终极指南:5分钟配置Windows本地实时语音转文字工具

TMSpeech终极指南&#xff1a;5分钟配置Windows本地实时语音转文字工具 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 你是否厌倦了需要联网才能使用的语音转文字工具&#xff1f;担心会议内容被上传到云端泄露隐私…...

地级市行政审批相关数据(1997-2023年)

01、数据介绍地级市行政审批数据是指在地级市范围内&#xff0c;行政机关对公民、法人或其他组织提交的行政审批申请进行处理的各项数据。地级行政审批中心数据库由中山大学岭南学院徐现祥教授团队&#xff0c; 依据各地行政审 批中心官方主页的公示信息整理构建。 目前发布的是…...

当AI智能体开始“宫斗”:用狼人杀和阿瓦隆游戏,深入理解LLM多智能体的通信与博弈

当AI智能体开始“宫斗”&#xff1a;用狼人杀和阿瓦隆游戏&#xff0c;深入理解LLM多智能体的通信与博弈 想象一下&#xff0c;十几个AI智能体围坐在虚拟圆桌旁&#xff0c;有的暗中交换眼神&#xff0c;有的慷慨陈词&#xff0c;还有的正在编织谎言——这不是科幻场景&#xf…...

ROI 怎么算才靠谱:把节省人力、错误成本与机会成本算清楚

ROI 怎么算才靠谱:把节省人力、错误成本与机会成本算清楚 作者:15年资深软件架构师 | 科技行业连续创业者 | 专注数字化转型ROI量化研究 本文适合人群:技术负责人、产品经理、创业团队核心成员、运营负责人、数字化转型从业者 开头:你算的ROI是不是经常被老板怼? 我猜你肯…...

探索Osiris:基于Panorama UI的CS2跨平台游戏增强框架实践

探索Osiris&#xff1a;基于Panorama UI的CS2跨平台游戏增强框架实践 【免费下载链接】Osiris Cross-platform game hack for Counter-Strike 2 with Panorama-based GUI. 项目地址: https://gitcode.com/gh_mirrors/os/Osiris 引言&#xff1a;当游戏界面成为技术创新的…...

Bebas Neue:开源几何无衬线字体如何解决现代设计的标题排版难题

Bebas Neue&#xff1a;开源几何无衬线字体如何解决现代设计的标题排版难题 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 当您需要为项目寻找一款既能提供专业视觉冲击力&#xff0c;又具备完全开源许可的标题…...

MCP 2026动态权限分配:为什么你的微服务网关总报“403 Context Mismatch”?这4类时间戳/地域/设备指纹校验陷阱90%团队踩过

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP 2026动态权限分配架构演进与核心设计哲学 MCP&#xff08;Multi-Context Permission&#xff09;2026 是面向云原生微服务环境的下一代权限治理框架&#xff0c;其核心突破在于将静态 RBAC 模型升级…...

FSearch:Linux用户的极速文件搜索神器,告别等待的终极指南

FSearch&#xff1a;Linux用户的极速文件搜索神器&#xff0c;告别等待的终极指南 【免费下载链接】fsearch A fast file search utility for Unix-like systems based on GTK3 项目地址: https://gitcode.com/gh_mirrors/fs/fsearch 还在为Linux系统中查找文件而烦恼吗…...