当前位置: 首页 > 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;通过钣金工艺加工出的产品叫做钣金…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; 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;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; 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配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...