news 2026/5/9 4:34:46

【Shell脚本函数介绍】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Shell脚本函数介绍】

文章目录

  • 一、什么是函数?
  • 二、函数的定义方式
    • 1. 普通写法
    • 2. 带 `function` 关键字写法
  • 三、函数的调用
  • 四、函数参数
      • 示例
  • 五、函数返回值
    • 1. 使用 `return` 返回状态码(0~255)
    • 2. 使用 `echo` 返回值
  • 六、函数与全局变量/局部变量

一、什么是函数?

在 Shell 中,函数就是一段可以重复调用的脚本代码块。
它的作用类似于 C、Python、Java 中的函数,支持参数传递返回值


二、函数的定义方式

在 Shell 中定义函数有两种写法:

1. 普通写法

function_name(){commands}

2. 带function关键字写法

functionfunction_name{commands}

三、函数的调用

定义函数后,只需要写函数名即可调用:

#!/bin/bashhello(){echo"Hello, Shell!"}# 调用函数hello

输出结果:

Hello, Shell!

四、函数参数

在函数中,可以通过特殊变量来获取传入的参数:

  • $1表示第 1 个参数
  • $2表示第 2 个参数
  • $#表示参数个数
  • $@表示所有参数(以列表形式)
  • $*表示所有参数(整体形式)

示例

#!/bin/bashshow_params(){echo"第一个参数:$1"echo"第二个参数:$2"echo"参数总数:$#"echo"所有参数(分开):$@"echo"所有参数(整体):$*"}show_params"Linux""Shell""Function"

运行结果:

第一个参数: Linux 第二个参数: Shell 参数总数: 3 所有参数(分开): Linux Shell Function 所有参数(整体): Linux Shell Function

五、函数返回值

在 Shell 中,函数返回值有两种方式:

1. 使用return返回状态码(0~255)

#!/bin/bashcheck_num(){if[$1-gt10];thenreturn0# 0 表示成功elsereturn1# 1 表示失败fi}check_num15if[$?-eq0];thenecho"数字大于10"elseecho"数字不大于10"fi

输出:

数字大于10

2. 使用echo返回值

因为return只能返回整数(状态码),要返回字符串或其他数据,常用echo并结合命令替换$()

#!/bin/bashsum(){echo$(($1+$2))}result=$(sum1020)echo"结果是:$result"

输出:

结果是: 30

六、函数与全局变量/局部变量

默认情况下,函数内定义的变量是全局变量
如果希望只在函数内部有效,需要使用local关键字。

#!/bin/bashmyfunc(){localname="Shell"echo"函数内部:$name"}name="Linux"myfuncecho"函数外部:$name"

输出:

函数内部: Shell 函数外部: Linux
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 2:44:59

一文搞懂TensorRT核心机制:层融合、内存复用与内核实例化

一文搞懂TensorRT核心机制:层融合、内存复用与内核实例化 在现代AI系统中,训练只是第一步,真正决定用户体验和商业价值的,往往是推理阶段的表现。一个准确率高达99%的模型,如果每次预测需要200毫秒,在实时视…

作者头像 李华
网站建设 2026/5/3 9:25:47

智能体深度解析:Agent中的多代理协同的优势和难点是什么?

虽然单体 Agent 架构对于定义明确的问题可能是有效的,但在面对复杂的多领域任务时,其能力往往受到限制。多 Agent 协作模式通过将系统构建为由不同专门化 Agent 组成的协作集合来解决这些限制。 这种方法基于任务分解原则,其中高级目标被分解…

作者头像 李华
网站建设 2026/5/8 1:56:56

从实验室到生产线:大模型必须经历的TensorRT改造

从实验室到生产线:大模型必须经历的TensorRT改造 在AI系统真正上线之前,大多数工程师都经历过这样的窘境:一个在论文或实验中表现惊艳的大模型,一旦部署到生产环境,立刻变得“笨重迟缓”——响应慢、吞吐低、显存爆、成…

作者头像 李华
网站建设 2026/5/1 15:41:13

iOS核心开发手册【1.1】

1.3 解决方案:添加拖动手势识别器用手势识别器也可以实现与解决方案1-1相同的交互功能,而且还不用直接编写触摸处理程序[1]。拖动手势识别器可以侦测拖曳手势。只要iOS系统检测到拖动手势,它就会触发你所指定的回调方法。解决方案1-2的代码与…

作者头像 李华
网站建设 2026/5/2 12:35:02

开源模型也能商业变现:基于TensorRT的推理API开发指南

开源模型也能商业变现:基于TensorRT的推理API开发指南 在AI应用从实验室走向生产线的过程中,一个常见的困境是:我们手握开源社区中训练得近乎完美的模型——比如YOLOv5、ResNet或BERT——但一旦部署到线上服务,却发现延迟高、吞吐…

作者头像 李华
网站建设 2026/5/1 7:28:10

模拟信号电平转换电路:新手入门必看

模拟信号电平转换实战指南:从零开始搞懂接口设计你有没有遇到过这样的情况?手里的传感器输出是5V,但主控芯片的ADC只能接受3.3V——直接连上去,轻则读数不准,重则烧毁引脚。又或者,采集音频信号时发现波形被…

作者头像 李华