【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
相关推荐
liangshanbo12158 分钟前
请求拦截器相关面试题
java·前端·javascript
ShawnLiaoking10 分钟前
ADS305 Big Data Lecuture4 Web Scraping
大数据·前端
liangshanbo121511 分钟前
React面试题:Hooks 为什么不能在分支和循环里面写?
前端·javascript·react.js
开开心心就好15 分钟前
视频压缩工具推荐,绿色版免安装双击即用
java·前端·人工智能·spring·智能手机·intellij-idea·excel
西红柿炖牛腩35419 分钟前
GLB 转 OBJ/PLY 后体积没变?3D 模型不减面变小靠什么
前端·javascript·3d
欣欣之王来了26 分钟前
前端开发学习路线图:2026年Vue方向最新版
前端·学习·架构·项目·vue3教程
夏幻灵28 分钟前
前端八股:Vue2 与 Vue3 的核心区别:响应式、Composition API 与性能优化
前端
ss2731 小时前
AI全栈实战 | 3.5-01 Python 全栈前端最小集:不会 React 也能做出能看的后台,关键就一条线
前端·python·react.js
人工智能培训1 小时前
数字孪生驱动大模型工业知识库:为具身机器人植入领域专业经验
大数据·linux·服务器·前端·人工智能