【Shell】编程入门到精通保姆级教程:----函数

发布时间:2026/11/5 18:17:07

【Shell】编程入门到精通保姆级教程:----函数 一、【Shell】编程入门Shell 函数 1.1、函数定义基础linux shell 可以用户定义函数然后在shell脚本中可以随便调用。shell中函数的定义格式如下[function]funname[()]{action;[return int;]}说明1、可以带function fun()定义也可以直接fun()定义,不带任何参数。2、参数返回可以显示加return返回如果不加将以最后一条命令运行结果作为返回值。return后跟数值 n(0-255)。下面的例子定义了一个函数并进行调用#!/bin/bash# author:朱朱# url:www.zhuzhu.comdemoFun(){echo这是我的第一个 shell 函数!}echo-----函数开始执行-----demoFunecho-----函数执行完毕-----输出结果-----函数开始执行----- 这是我的第一个 shell 函数! -----函数执行完毕-----1.2、带return返回值的函数下面定义一个带有return语句的函数#!/bin/bash# author:朱朱# url:www.zhuzhu.comfunWithReturn(){echo这个函数会对输入的两个数字进行相加运算...echo输入第一个数字: readaNumecho输入第二个数字: readanotherNumecho两个数字分别为$aNum和$anotherNum!return$(($aNum$anotherNum))}funWithReturnecho输入的两个数字之和为$?!输出类似下面这个函数会对输入的两个数字进行相加运算... 输入第一个数字:1输入第二个数字:2两个数字分别为1和2!输入的两个数字之和为3!函数返回值在调用该函数后通过$?来获得。注意所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分直至shell解释器首次发现它时才可以使用。调用函数仅使用其函数名即可。注意return语句只能返回一个介于 0 到 255 之间的整数而两个输入数字的和可能超过这个范围。要解决这个问题您可以修改return语句直接使用echo输出和而不是使用returnfunWithReturn(){echo这个函数会对输入的两个数字进行相加运算...echo输入第一个数字: readaNumecho输入第二个数字: readanotherNumsum$(($aNum$anotherNum))echo两个数字分别为$aNum和$anotherNum!echo$sum# 输出两个数字的和}1.3、函数参数 在Shell中调用函数时可以向其传递参数。在函数体内部通过$n的形式来获取参数的值例如$1表示第一个参数$2表示第二个参数…带参数的函数示例#!/bin/bash# author:朱朱# url:www.zhuzhu.comfunWithParam(){echo第一个参数为$1!echo第二个参数为$2!echo第十个参数为$10!echo第十个参数为${10}!echo第十一个参数为${11}!echo参数总数有$#个!echo作为一个字符串输出所有参数$*!}funWithParam1234567893473输出结果第一个参数为1!第二个参数为2!第十个参数为10!第十个参数为34!第十一个参数为73!参数总数有11个!作为一个字符串输出所有参数1234567893473!注意$10不能获取第十个参数获取第十个参数需要${10}。当n10时需要使用${n}来获取参数。另外还有几个特殊字符用来处理参数参数处理说明$#传递到脚本或函数的参数个数$*以一个单字符串显示所有向脚本传递的参数$$脚本运行的当前进程ID号$!后台运行的最后一个进程的ID号$与$*相同但是使用时加引号并在引号中返回每个参数。$-显示Shell使用的当前选项与set命令功能相同。$?显示最后命令的退出状态。0表示没有错误其他任何值表明有错误。二、函数使用注意事项与案例 2.1、$?返回值容易被覆盖$?仅对其上一条指令负责一旦函数返回后其返回值没有立即保存入参数那么其返回值将不再能通过$?获得。测试代码#!/bin/bashfunctiondemoFun1(){echo这是我的第一个 shell 函数!returnexpr11}demoFun1echo$?functiondemoFun2(){echo这是我的第二个 shell 函数!expr11}demoFun2echo$?demoFun1echo在这里插入命令echo$?输出结果这是我的第一个 shell 函数!2这是我的第二个 shell 函数!20这是我的第一个 shell 函数!在这里插入命令0第二次调用demoFun1后没有立即查看$?的值而是先插入了一条别的echo命令最后再查看$?的值得到的是 0也就是上一条echo命令的结果而demoFun1的返回值被覆盖了。下面这个测试连续使用两次echo $?得到的结果不同更为直观#!/bin/bashfunctiondemoFun1(){echo这是我的第一个 shell 函数!returnexpr11}demoFun1echo$?echo$?输出结果这是我的第一个 shell 函数! 2 02.2、函数作为条件判断Shell真假规则函数与命令的执行结果可以作为条件语句使用。要注意的是和 C 语言不同shell 语言中0 代表 true0 以外的值代表 false。示例脚本#!/bin/bashechoHello World !|grep-eHelloecho$?echoHello World !|grep-eByeecho$?ifechoHello World !|grep-eHellothenechotrueelseechofalsefiifechoHello World !|grep-eByethenechotrueelseechofalsefifunctiondemoFun1(){return0}functiondemoFun2(){return12}ifdemoFun1thenechotrueelseechofalsefiifdemoFun2thenechotrueelseechofalsefi其执行结果如下Hello World!01Hello World!truefalsetruefalsegrep是从给定字符串中寻找匹配内容的命令。首先看出如果找到了匹配的内容会打印匹配部分且得到的返回值$?为 0如果找不到则返回值$?为 1。接下来分别将这两次执行的grep命令当作条件语句交给if判断得出返回值$?为 0即执行成功时条件语句为 true当返回值$?为 1即执行失败时条件语句为 false。之后再用函数的return值作为测试其中demoFun1返回值为 0demoFun2返回值选择了任意一个和 0 不同的整数这里为 12。将函数作为条件语句交给if判断得出返回值为 0 时依然为 true而返回值只要不是 0条件语句都判断为 false。
延伸阅读

更多相关文章

2026/10/28 18:27:37

方差分析ANOVA从原理到实战:用Python完成单因素与多因素检验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 20:54:22

SDN安全实践:DDoS检测与OpenFlow动态防御闭环

简介:本资源是一套面向计算机专业本科生的高分毕业设计实战项目,聚焦SDN环境下DDoS攻击的实时检测与动态防御,适用于毕设选题、课程设计及网络安全方向项目实训。资源包共含完整可运行源码、详细设计报告、系统部署文档及实验验证说明&#x…

2026/11/4 19:50:51

基于SDN的DDoS检测与防御系统:熵值建模+OpenFlow实时引流

简介:本资源是一套面向计算机及相关专业本科生的高分毕业设计实战项目,聚焦SDN环境下DDoS攻击的实时检测与动态防御,专为毕设攻坚、课程设计及网络安全方向实践学习者打造。项目基于OpenFlow协议与Ryu控制器构建可编程网络架构,集…

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑