[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. 如何构建数组(我们可以将其视为包含多个独立元素的变量集合)。

 

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

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

相关文章

编译原理Lab1-用FLEX构造C-Minus-f词法分析器

HNU编译原理lab1实验–根据cminux-f的词法补全lexical_analyer.l文件&#xff0c;完成词法分析器。 本文没有添加任何图片&#xff0c;但是以复制输出的形式展现出来了实验结果。 实验要求&#xff1a; 根据cminux-f的此法补全lexical_analyer.l文件&#xff0c;完成词法分析…

国家超级计算济南中心低代码平台应用实践

摘要&#xff1a;文章主要介绍了济南超算使用低代码平台明道云解决了一系列业务问题&#xff0c;包括资产管理、人员与机构管理、流程制度管理等。通过明道云平台&#xff0c;济南超算成功地将不同部门的业务信息进行整合&#xff0c;提高了工作效率和管理水平。文章还强调了明…

计算机端口

前言 计算机端口&#xff08;Port&#xff09;是一种用于在计算机网络中标识特定服务或应用程序的机制。 端口是一个数字&#xff0c;范围从0到65535&#xff0c;用于将网络通信分配给不同的应用程序或服务。 在 Internet 协议套件&#xff08;TCP/IP&#xff09;中&#xff0…

MG-HSF

作者未提供代码

Go语言中结构体的使用和示例

结构体&#xff08;简称struct&#xff09;用于创建不同数据类型的成员集合&#xff0c;放入一个单一的变量中。虽然数组用于将相同数据类型的多个值存储在单一变量中&#xff0c;但结构体用于将不同数据类型的多个值存储在单一变量中。结构体对于将数据组合在一起以创建记录非…

openGL之纹理 :第二课

#include "glew.h" #include "glfw3.h" #include "SOIL2.h"//如何解析输入的数据流 0&#xff0c;1,2 分三部分 GLchar * vertextSrc " #version 330 core \n \layout (location 0) in vec3 position; \layout (location 1) in vec3 col…

【精选】​​通道热点加持的LW-ResNet:小麦病害智能诊断与防治系统

1.研究背景与意义 小麦是世界上最重要的粮食作物之一&#xff0c;但由于病害的侵袭&#xff0c;小麦产量和质量受到了严重的威胁。因此&#xff0c;开发一种高效准确的小麦病害识别分类防治系统对于保障粮食安全和农业可持续发展具有重要意义。 传统的小麦病害识别分类方法主…

Feign

目录 RestTemplate方式调用存在的问题: 定义和使用Feign客户端 自定义Feign的配置 性能优化 Feign的最佳实践 Feign的使用步骤&#xff1a; 1、引入依赖 2、添加EnableFeignClients注解 3、编写FeignClient接口 4、使用FeignClient中定义的方法代替RestTemplate Feign的…

什么是迁移学习

1 迁移学习概述 迁移学习&#xff08;Transfer Learning&#xff09;是机器学习中的一种方法&#xff0c;它允许模型将从一个任务中学到的知识应用到另一个相关的任务中。这种方法在数据稀缺的情况下尤为有用&#xff0c;因为它减少了对大量标记数据的需求。迁移学习已成为深度…

Node使用Nvm安装双版本切换(node两个版本同时用怎么办?不同的项目Node版本要求不一样怎么办?)

先把node.js卸载 开始—>添加删除程序—>node npm -v node -v //检查是否还存在&#xff0c;卸载成功就行了NVM下载 github下载 百度网盘下载 打开安装包以管理员身份安装&#xff0c;要是记得这个路径并且必须全是英文 使用nvm安装两个使用的node版本 cmd以管理员…

计算机组成原理2

1.浮点数 2.IEEE 754 3.存储器的性能指标 4.存储器的层次化结构 主存类似手机运行内存8g &#xff0c;辅存类似手机内存128g.... 辅存必须先通过主存才能被cpu接收&#xff0c;就例如微信打开那个月亮小人界面两三秒就是主存在读取辅存的程序然后被cpu接收运行。 5.主存储…

Greenplum的数据库年龄检查处理

概述 Greenplum是基于Postgresql数据库的分布式数据库&#xff0c;而PG数据库在事务及多版本并发控制的实现方式上很特别&#xff0c;采用的是递增事务id的方法&#xff0c;事务id大的事务&#xff0c;认为比较新&#xff0c;反之事务id小&#xff0c;认为比较旧。 事务id的上…

经典的回溯算法题leetcode组合问题整理及思路代码详解

目录 组合问题 leetcode77题.组合 leetcode216题.组合总和III leetcode40题.组合总和II leetcode39题.组合总和 倘若各位不太清楚回溯算法可以去看我上一篇文章。 回溯算法详解-CSDN博客 组合问题 一般组合和排列类的问题我们都会转化成一个树形问题&#xff0c;更便于…

26. 删除有序数组中的重复项(remove-duplicates-from-sorted-array)

26. 删除有序数组中的重复项(remove-duplicates-from-sorted-array) 给你一个 非严格递增排列 的数组 nums &#xff0c;请你** 原地** 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 …

批量创建表空间数据文件(DM8:达梦数据库)

DM8:达梦数据库 - - 批量创建表空间数据文件 环境介绍1 批量创建表空间SQL2 达梦数据库学习使用列表 环境介绍 在某些场景(分区表子表)需要批量创建表空间,给不同的表使用,以下代码是批量创建表空间的SQL语句; 1 批量创建表空间SQL --创建 24个数据表空间,每个表空间有3个数…

强化学习小笔记 —— 如何选择合适的更新步长

在强化学习中&#xff0c;动作价值函数的更新可以使用增量法&#xff0c;如下所示&#xff1a; Q k 1 k ∑ i 1 k r i 1 k ( r k ∑ i 1 k − 1 r i ) 1 k ( r k ( k − 1 ) Q k − 1 ) 1 k ( r k k Q k − 1 − Q k − 1 ) Q k − 1 1 k [ r k − Q k − 1 ] \beg…

Linux宝塔面板搭建Discuz论坛, 并内网穿透实现公网访问

Linux宝塔面板搭建Discuz论坛&#xff0c; 并内网穿透实现公网访问 文章目录 Linux宝塔面板搭建Discuz论坛&#xff0c; 并内网穿透实现公网访问前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 &#x1f4f7; 江池…

低代码平台推荐:五大低代码厂商谁的模式更“合适”

随着数字化时代的到来&#xff0c;低代码开发平台作为提高数字生产力的工具正受到越来越多企业的关注&#xff0c;市面上的低代码产品和厂商更是“乱花渐欲迷人眼”。 各家产品不仅功能各有不同&#xff0c;甚至商机都有区别的情况&#xff0c;如何做好产品选型已然成了采购企…

C语言——指针(一)

&#x1f4dd;前言 这篇文章主要带大家初步认识一下指针&#xff0c;供大家理解参考。 主要归纳与讲解&#xff1a; 1&#xff0c;指针与指针变量 2&#xff0c;指针的基本使用&#xff08;如何定义&#xff0c;初始化&#xff0c;引用&#xff09; &#x1f3ac;个人简介&…

计算方法 期末总结

思维导图 绪论 算法的性质&#xff1a; 有穷性、确切性、有输入输出、可行性 算法的描述方法&#xff1a; 自然语言、伪代码、流程图、N-S流程图 算法设计思想&#xff1a; 化大为小的缩减技术&#xff1a;二分法化难为易的校正技术&#xff1a;开方法化粗为精的松弛技术&a…