【Shell脚本函数介绍】

文章目录


一、什么是函数?

在 Shell 中,函数就是一段可以重复调用的脚本代码块。

它的作用类似于 C、Python、Java 中的函数,支持 参数传递 和 返回值。


二、函数的定义方式

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

1. 普通写法

bash 复制代码
function_name() {
    commands
}

2. 带 function 关键字写法

bash 复制代码
function function_name {
    commands
}

三、函数的调用

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

bash 复制代码
#!/bin/bash

hello() {
    echo "Hello, Shell!"
}

# 调用函数
hello

输出结果:

复制代码
Hello, Shell!

四、函数参数

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

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

示例

bash 复制代码
#!/bin/bash

show_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)

bash 复制代码
#!/bin/bash

check_num() {
    if [ $1 -gt 10 ]; then
        return 0  # 0 表示成功
    else
        return 1  # 1 表示失败
    fi
}

check_num 15
if [ $? -eq 0 ]; then
    echo "数字大于10"
else
    echo "数字不大于10"
fi

输出:

复制代码
数字大于10

2. 使用 echo 返回值

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

bash 复制代码
#!/bin/bash

sum() {
    echo $(($1 + $2))
}

result=$(sum 10 20)
echo "结果是: $result"

输出:

复制代码
结果是: 30

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

默认情况下,函数内定义的变量是 全局变量 。

如果希望只在函数内部有效,需要使用 local 关键字。

bash 复制代码
#!/bin/bash

myfunc() {
    local name="Shell"
    echo "函数内部: $name"
}

name="Linux"
myfunc
echo "函数外部: $name"

输出:

复制代码
函数内部: Shell
函数外部: Linux
相关推荐
程序猿乐锅20 分钟前
面向对象练习:图书借阅系统里的封装、抽象类与多态
开发语言·前端·数据库·后端·python·学习·1024程序员节
老木避暑研究所24 分钟前
负氧离子数据的采集、清洗与可视化:一套可复用的环境监测数据分析模板
前端·人工智能·数据分析
计算机魔术师43 分钟前
AI 推翻了一个当了30年地基的假设,查的人恰好是立论者
前端
范同学~1 小时前
项目添加水印
java·前端·javascript
鬼手点金1 小时前
缓存作为架构约束
开发语言·前端·人工智能·python·microsoft·缓存·架构
月夏1 小时前
前端第一次接自己的后端:mock 切真接口踩了 2 个坑,组件只改了一行 import
前端·后端·node.js
IT_陈寒1 小时前
React实战技巧总结:如何优雅处理复杂列表的渲染卡顿问题?
前端·人工智能·后端
ZoeLandia1 小时前
React11:数据请求与 TanStack Query
前端·react.js·typescript·react
前端架构师-老李1 小时前
HTML与CSS基础第二课—初识HTML
前端·css·html
视***间1 小时前
视程空间Edge工业边缘盒:给工业机器人装一颗耐造的“本地大脑“
前端·edge·机器人·边缘计算·智慧工业·工业视觉·视程空间