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 (选择&…

Redis7

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

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

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

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个元素的最长递增子序列,里层遍历寻找之…

RubyMine 2023:让Ruby编程变得更简单 mac/win版

JetBrains RubyMine 2023是一款专为Ruby开发者打造的强大集成开发环境(IDE)。这款工具集成了许多先进的功能,旨在提高Ruby编程的效率和生产力。 RubyMine 2023软件获取 RubyMine 2023的智能代码编辑器提供了丰富的代码补全和提示功能&#…

使用vuetify实现全局v-alert消息通知

前排提示,本文为引流文,文章内容不全,更多信息前往:oldmoon.top 查看 简介 使用强大的Vuetify开发前端页面,结果发现官方没有提供简便的全局消息通知组件(像Element中的ElMessage那样)&#xf…

【web】nginx+php环境搭建-关键点(简版)

一、nginx和php常用命令 命令功能Nginxphp-fpm启动systemctl start nginxsystemctl start php-fpm停止systemctl stop nginxsystemctl stop php-fpm重启systemctl restart nginxsystemctl restart php-fpm查看启动状态systemctl status nginxsystemctl status php-fpm开机自启…

[HackmyVM]靶场 Azer

kali:192.168.56.101 主机发现 arp-scan -l靶机:192.168.56.103 端口扫描 nmap -p- 192.168.56.103 开启了80 3000端口 看一下80端口 一直在那转,看源码也没什么有用的东西 扫一下目录 扫不到什么东西 看看另一个端口 是个登录界面 输入admin/admin测试 错误…

Kafka入门二——SpringBoot连接Kafka示例

实现 1.引入maven依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache…

基于springboot+vue的学科平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

轻量级模型,重量级性能,TinyLlama、LiteLlama小模型火起来了,针对特定领域较小的语言模型是否与较大的模型同样有效?

轻量级模型&#xff0c;重量级性能&#xff0c;TinyLlama、LiteLlama小模型火起来了&#xff0c;针对特定领域较小的语言模型是否与较大的模型同样有效? 当大家都在研究大模型&#xff08;LLM&#xff09;参数规模达到百亿甚至千亿级别的同时&#xff0c;小巧且兼具高性能的小…