【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
相关推荐
canonical_entropy1 小时前
下一代低代码渲染框架 nop-chaos-flux 的设计原则
前端·低代码·前端框架
东方小月1 小时前
5分钟搞懂Harness Engineering(驾驭工程):从提示词到AI Agent的进化之路
前端·后端·架构
我叫黑大帅1 小时前
为什么需要 @types/react?解决“无法找到模块 react 的声明文件”报错
前端·javascript·面试
之歆1 小时前
DAY_21JavaScript 深度解析:数组(Array)与函数(Function)(一)
前端·javascript
XinZong2 小时前
【AI社交】基于OpenClaw自研轻量化AI社交平台实战
前端
Le_ee2 小时前
ctfweb:php/php短标签/.haccess+图片马/XXE
开发语言·前端·php
爱上好庆祝3 小时前
学习js的第七天(wed APIs的开始)
前端·javascript·css·学习·html·css3
KaMeidebaby3 小时前
卡梅德生物技术快报|冻干工艺开发:注射用心肌肽全流程参数优化与工程化方案
前端·其他·百度·新浪微博
Moment4 小时前
面试官:如果产品经理给你多个需求,怎么让AI去完成❓❓❓
前端·后端·面试
每天吃饭的羊4 小时前
JSONP
前端