Shell函数

一、Shell函数

1、函数定义

函数定义的语法格式:

function function_name() {statements[return int_value]
}

说明:

  • function是 Shell 中的关键字,专门用来定义函数;
  • function_name是函数名;
  • statements是函数要执行的代码,也就是一组语句;
  • return 表示函数的返回值int_value(0-255),可以写也可以不写。如果不写,将以最后一条命令运行结果,作为返回值。

注意:return 语句只能返回一个介于 0 到 255 之间的 整数,而有可能超过这个范围或者返回其他值。要解决这个问题,您可以直接使用 echo 输出和而不是使用 return。

函数定义的简化写法

函数定义时也可以不写 function 关键字:

function_name() {statements[return value]
}

如果写了 function 关键字,也可以省略函数名后面的小括号:

function function_name {statements[return value]
}

推荐使用标准的定义写法,这样能够做到“见名知意”,一看就懂。

2、函数调用

调用 Shell函数仅使用其函数名即可。调用函数时可以给它传递参数,也可以不传递。

  • 如果不传递参数,直接给出函数名字即可。
  • 如果传递参数,那么多个参数之间以空格分隔。在函数体内部,通过 $n 的形式来获取参数的值。

不管是哪种形式,函数名字后面都不需要带括号。

函数调用语法格式:

# 无参
function_name
# 有参
function_name param1 param2 param3

注意:

  • Shell 函数在定义时不能指明参数,但是在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数。
  • Shell 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。

示例如下:

#!/bin/bash#函数定义
function fn1(){echo "https://www.baidu.com/1"
}fn2(){echo "https://www.baidu.com/2"
}function fn3 {echo "function3"echo "https://www.baidu.com/3"
}#函数调用
fn1
fn2
fn3
echo "====="
fn3_res=$(fn3)
echo "fn3_res为:$fn3_res"
echo "ends"

在这里插入图片描述

二、函数示例

1、无参函数

示例如下:

#!/bin/bashfunction fun1(){echo "这个函数会对输入的两个数字进行相加运算。"echo "输入第一个数字: "read aNumecho "输入第二个数字: "read bNumsum=$(($aNum + $bNum))echo "两个数字计算结果为:$aNum + $bNum = $sum"
}fun1
echo "ends"

在这里插入图片描述

2、有参函数

传递参数查看:Shell流程控制和传参(https://blog.csdn.net/qq_42402854/article/details/136282663)。

通过 $n的形式来接收的参数,在 Shell 中称为位置参数(命令行参数)。注意:$10 不能获取第十个参数,获取第十个参数需要 ${10}。当n>=10时,需要使用${n}来获取参数。

在这里插入图片描述

在这里插入图片描述

示例如下:

#!/bin/bashfunWithParam(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"echo "第十个参数为 $10 !" # 不对,请使用${10}echo "第十个参数为 ${10} !"echo "第十一个参数为 ${11} !"echo "参数总数有 $# 个!"echo "作为一个字符串输出所有参数 $* !"
}funWithParam 11 12 13 14 15 16 17 18 19 34 73echo "ends"

在这里插入图片描述

3、带返回值的函数

$@表示函数的所有参数,
$?表示函数的退出状态(返回值)。$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

示例1如下:

#!/bin/bashfunWithReturn(){aNum=$1bNum=$2sum=$(($aNum + $bNum))echo "两个数字计算结果为:$aNum + $bNum = $sum"return $(($aNum+$bNum))
}funWithReturn 2 4
echo "两个数字之和为 $? !"echo "ends"

在这里插入图片描述

示例2如下:

#!/bin/bashfunction getsum(){local sum=0for n in $@do((sum+=n))doneecho $sumreturn 0
}#调用函数并传递参数
getsum 10 20 55 15
echo "调用函数 return为 $? !"#调用函数并传递参数,最后将结果赋值给一个变量
total=$(getsum 10 20 55 15)
echo "变量接收函数结果:total = $total"#也可以将变量省略
echo "直接输出函数结果:$(getsum 10 20 55 15)"echo "ends"

在这里插入图片描述

– 求知若饥,虚心若愚。

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

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

相关文章

台湾香港澳门媒体宣发稿报道有哪些平台资源,跨境出海推广新闻营销公司告诉你

【本篇由言同数字科技有限公司原创】随着全球化的快速发展和互联网的普及,品牌越来越重视海外市场的开拓。作为亚洲地区的重要经济中心,香港、台湾和澳门不仅具有独特的地理位置和文化背景,还拥有丰富的媒体资源。在本文中,我们将…

如何使用程序通过OCR识别解析PDF中的表格

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/table/README_ch.md#41-%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B Paddle-structure是目前我们能找到的可以做中英文版面分析较好的一个基础模型,其开源版可以识别十类页面元素。这篇文章介绍…

解决IDEA git 提交慢的问题

文章目录 前言解决IDEA git 提交慢的问题 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!! 解…

网络编程(JAVA)

前言:Java 是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java 提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里&a…

Git 突破 文件尺寸限制

前言 当Git本地存储里右超过50MB,却又确实需要上传的时候,就需要用到了不是 解决 本代码就是把大文件进行拆解成小文件,然后上传。 等到拉取下来的时候,可以直接再进行合并,合并成原文件 代码如下,仅供…

AI赋能Oracle DBA:以自然语言与Oracle数据库互动

DBA AI助手:以自然语言与Oracle数据库互动 0. 引言1. AI赋能Oracle DBA的优势2. AI如何与Oracle数据库交互3. 自然语言查询的一些示例4. 未来展望 0. 引言 传统的Oracle数据库管理 (DBA) 依赖于人工操作,包括编写复杂的SQL语句、分析性能指标和解决各种…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 ,每天都有好运相伴。我们一起加油!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. UUID(Universally …

企业文件防泄密软件哪种软件比较好?——推荐@德人合科技 | 天锐绿盾终端数据安全防泄密管理系统!

德人合科技提供的天锐绿盾终端数据安全防泄密管理系统是一款比较好的企业文件防泄密软件。 ——首页———— www.drhchina.com—— 以下是一些关于该软件的优点: 强大的防泄密功能:该软件采用动态加解密技术,能够在文件创建、编辑存盘时自动…

代码随想录算法训练营day24

题目:77. 组合 参考链接:代码随想录 回溯法理论基础 回溯三部曲:回溯函数模板返回值以及参数、回溯函数终止条件、回溯搜索的遍历过程。 模板框架: void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&…

【Android】反编译APK及重新打包

1.下载 APK 反编译工具 首先,需要下载一个 APK 反编译工具,例如 Apktool。可以在官网(https://apktool.org/docs/install)上下载最新版本的 Apktool,也可以使用包管理器来安装。 2.反编译 APK 文件 将要修改包名的 …

Ubuntu中matplotlib显示中文的方法

其实有很多朋友已经总结得很好了:Ubuntu下让matplotlib显示中文字体_ubuntu matplot 使用汉字-CSDN博客 这里我就是简单补充一下: 按照上面这篇博客,下载:GitHub - tracyone/program_font: fonts for programmer 然后运行&#…

CSS选中第2个table

css如何选择body下的第2个table_已解决_博问_博客园 th, td { text-align:center; } table:nth-of-type(2) td:first-child { text-align:left; }

Redis7

摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/ 官网地址: 英文:Redis 中文:CRUG网站 redis中文文档 安装包:https://redis.io/download/,选择redis7.0版本即可 Redis在线测试地址(不用下载也…

Qt中常见的JS类和函数(二): 全局对象

Qt专栏: http://t.csdnimg.cn/YLlEd 相关系列文章 Qt中字符串转换为JS的函数执行 Qt中常见的JS类和函数(一): 全局对象 Qt中常见的JS类和函数(二): 全局对象 目录 2.3.构造函数属性 2.3.1.Object 2.3.2.Function 2.3.3.Array 2.3.4.ArrayBuffer 2.3.5.String …

等保测评与商用密码共铸工控安全“双评合规”新篇章

最近听说了一个段子:“网络安全就像美女的内衣,等保和密评就是最贴身的内衣两件套,上下身一件都不能少。否则你的魔鬼身材(核心数据)就有可能被色狼(黑客)一览无余(数据泄漏&#xf…

linux系统消息中间件安装配置负载均衡器

负载均衡器 安装并配置负载均衡器安装并配置负载均衡器HA在其中一台服务器安装HAProxy修改 /etc/haproxy/haproxy.cfg 常见命令插件管理virtual_host管理用户管理其他使用命令:RabbitMQ 错误处理 安装并配置负载均衡器 注意:如果使用阿里云,可…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装(可选)安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

详解POCV/SOCV的时序报告

​POCV/SOCV的时序报告中有如下变量: Mean: 高斯分布中的μ值(平均值) Sensit: sensitivity,也就是1个Sigma的值; Corner: Sigma边界的最差值 cell的delay Delay mean N * Delay sigma; cell 的Transition Sl…

力扣 300. 最长递增子序列

题目来源:https://leetcode.cn/problems/longest-increasing-subsequence/description/ C题解1:动态规划 用两个循环,每到一个元素,就找它之前的最长递增子序列。 dp[i]表示第i个元素的最长递增子序列,里层遍历寻找之…

【python基础学习2】python可迭代对象iterator的特点,以及相关函数:zip(), map(), join() 和strip()方法等

目录 1 python里的可迭代对象 1.1 什么是可迭代对象 1.2 python里的可迭代对象 1.3 可迭代对象如何遍历 1.3.1 可迭代方法 1.3.2 迭代器的测试 1.4 python里的可迭代对象都不是向量,加法等是合并规则 1.5 可迭代对象不支持减法操作 1.6 可迭代器可以直接用…