Bash 函数可以将相关命令组织在一个名称下。调用该名称时,整个代码块会执行。你可以传递参数来自定义行为,并返回值来传达结果。这样可以保持代码整洁易于维护。
Linux 在全球服务器环境中占据主导地位,因此掌握 Bash 函数比以往任何时候都更重要。函数可以把混乱的脚本变成清晰、可复用的自动化工具。
本指南将带你从基本语法到高级用法。你会学到如何声明函数、传递参数、处理返回值,以及十个可以在自己脚本中使用的实际例子。
TL;DR
- Bash 函数是可以在整个脚本中重复使用的命名代码块
- 使用以下方式定义函数 function_name() { commands; } syntax
- 使用以下方式传递参数 $1, $2, $3 positional parameters
- 函数提高了代码的可读性、模块性和可维护性
- Use return 从函数中退出并传达状态码(0 = 成功,非零 = 失败)
- 函数可以通过以下方式在脚本间共享 source or export -f
- 实际用法包括文件备份、磁盘监控、输入验证和服务检查
什么是 Bash 脚本?

Bash 脚本是一种使用 Bash shell 实现任务自动化的方法。它是 Linux 的默认命令行界面,也是 macOS 上的标准工具。Bash 脚本是用 Bash 脚本语言编写的程序,可以在终端中或作为独立脚本文件执行。
With Linux 桌面使用量稳步增长 以及在全球服务器环境中占据主导地位的操作系统,Bash 脚本技能对 IT 专业人士来说已经变得宝贵。该语言与 Docker、Kubernetes 等 DevOps 工具以及 CI/CD 管道集成良好。
Bash 脚本允许你完成从简单命令到复杂自动化和系统管理的任务。你可以自动化重复任务、开发维护脚本、构建部署管道、管理软件系统和操作数据。
什么是 Bash 函数?

Bash 函数可以定义为在 Bash 脚本中定义或在命令提示符处交互式设置的一组命令,具体取决于使用场景。定义后,Bash 函数可以在脚本内或其他脚本中多次调用,就像普通的 shell 命令一样。
Bash 函数允许你创建可重用的代码块来执行复杂操作、组织代码和简化脚本。你可以向 Bash 函数传递参数,然后在函数内使用它们来执行操作。Bash 函数返回的值可以在脚本的其他地方使用。
我们将介绍几种特定的实现风格,包括 simple_function 对于基本逻辑, simple_inputs 对于参数处理和高级结构,如 fibonnaci_recursion.
Bash 函数基础 对任何系统管理员或从事自动化工作的 DevOps 工程师都至关重要。以下部分详细介绍了这些类型。
为什么要使用 Bash 函数?

既然已经了解了 Bash 函数的定义,让我们回顾一下它们的主要优势。本部分帮助你理解函数最适用的场景。
Reusability
你创建一个 Bash 函数,就拥有了一个强大的工具。你可以一次性编写一个代码块,然后在脚本内或其他脚本中多次重复使用它。
这让你的代码更高效,省去了重复编写的时间。维护代码也变得简单了,因为你只需要在一个地方修改函数。
Readability
复杂的脚本很难理解。Bash 函数通过将脚本分解成更小、更容易管理的部分来解决这个问题。
每个函数都有特定的用途和描述性的名称,说明它的作用。这样你和其他人都能更轻松地理解和维护代码。
Modularity
函数整理你的代码。你可以把逻辑分割成更小的模块,保持脚本结构清晰易管理。
如果需要添加新功能,可以直接添加,不会影响脚本的其他部分。当需要删除或修改功能时,脚本的其余部分保持完整。
Bash 函数参数
你可以向函数传递参数。这些参数让函数能够根据接收到的输入适应不同的需求,执行不同的操作。
这开启了许多可能性,让你的函数更灵活、更适应各种场景。与其多次编写类似的代码,不如写一个能处理不同输入的函数。
如何以及在哪里使用 Bash 函数?

现在让我们更深入一点,从一个简短的示例开始学习如何创建 Bash 函数。以下语法适用于基于 Unix 的环境。如果你在 Windows 上工作,可以 在 Windows 10 上安装 Linux Bash 来跟随这些示例操作。
创建 Bash 函数
从以下命令结构开始:
function_name () {
# commands go here
}
创建函数后,你可以在代码中随时使用它。这是一个实际示例:
greet () {
echo “Hello, $1!”
}
用以下方式调用此函数 greet World 输出 "Hello, World!" The $1 代表传递给函数的第一个参数。
以下是你可以在自己的脚本中使用的更多实际示例:
# 备份任何文件
backup_file () {
cp “$1” “$1.bak”
echo "Backup created: $1.bak"
}
# 检查目录是否存在,不存在则创建
ensure_dir () {
if [ ! -d “$1” ]; then
mkdir -p “$1”
echo "Created directory: $1"
fi
}
# 带时间戳的日志消息
log_message () {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1”
}
定义一次自定义 Bash 函数,在脚本中随处需要时直接调用。
函数语法基础
函数就像主脚本内的小脚本,但它们共享 shell 的内存。编写函数时要记住这三个特定行为。
变量作用域(局部与全局)
函数内的变量默认是全局的。如果你定义 my_var=”test” 在函数内部,它会覆盖任何现有的 my_var 在你的脚本中。始终使用 local 将变量限制在函数范围内可以防止副作用:
local my_var=”value”
Positional Parameters
函数使用相同的方式读取参数 $1, $2, and $@ 变量作为脚本。这些变量是函数的局部变量,当函数退出时会被重置。除非显式传入,否则脚本的原始参数在函数内部无法访问。
Return Values
Bash 函数不会像 Python 或 Java 脚本函数那样返回数据。 return 命令只能设置退出状态码(0-255)来表示成功或失败。要返回实际的数据(比如字符串或计算结果), echo 调用函数时捕获结果:
result=$(my_function)
10 个实用 Bash 函数示例
现在你已经理解了 Bash 函数以及如何创建它们,这里有十个实用示例可以添加到你的脚本中。每个函数都解决一个常见问题,演示了正确的结构、参数处理和返回值。
1. 文件备份功能
为任何文件创建带时间戳的备份:
backup_file () {
local file=”$1″
local backup="${file}.$(date +%Y%m%d_%H%M%S).bak"
if [ -f “$file” ]; then
cp “$file” “$backup”
echo "Backup created: $backup"
return 0
else
echo "Error: File not found"
return 1
fi
}
Usage: backup_file /etc/nginx/nginx.conf
2. Directory Checker
检查目录是否存在,不存在则创建:
ensure_dir () {
local dir=”$1″
if [ ! -d “$dir” ]; then
mkdir -p “$dir”
echo "Created: $dir"
fi
}
Usage: ensure_dir /var/log/myapp
3. Timestamped Logger
为日志消息添加时间戳,方便调试:
log_message () {
local level=”$1″
local message=”$2″
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message"
}
Usage: log_message "INFO" "Script started"
4. 磁盘空间监控
检查磁盘使用情况,超过阈值时发出警告:
check_disk_space () {
local threshold=”${1:-80}”
local usage=$(df / | tail -1 | awk '{print $5}' | tr -d '%')
if [ "$usage" -gt "$threshold" ]; then
echo "Warning: Disk usage at ${usage}%"
return 1
fi
return 0
}
Usage: check_disk_space 90
5. Input Validator
验证用户输入不为空:
validate_input () {
local input=”$1″
local name=”$2″
if [ -z “$input” ]; then
echo "Error: $name cannot be empty"
return 1
fi
return 0
}
Usage: validate_input “$username” “Username”
6. 服务状态检查
检查服务是否在运行,并报告状态:
check_service () {
local service=”$1″
if systemctl is-active –quiet "$service"; then
echo "$service is running"
return 0
else
echo "$service is not running"
return 1
fi
}
Usage: check_service nginx
7. 文件扩展名提取器
从文件名中提取扩展名:
get_extension () {
local filename=”$1″
echo “${filename##*.}”
}
Usage: ext=$(get_extension "document.pdf")
8. String Trimmer
从字符串中删除前后的空格:
trim_string () {
local str=”$1″
str="${str#"${str%%[![:space:]]*}"}"
str="${str%"${str##*[![:space:]]}"}"
echo “$str”
}
Usage: clean=$(trim_string " hello world ")
9. 安全文件归档工具
将文件移动到自定义的 $HOME/.trash 目录,而不是永久删除。它会为文件名附加时间戳,防止覆盖之前的备份。
safe_remove() {
local file=”$1″
local trash="$HOME/.trash"
# 附加时间戳以避免覆盖现有文件
local new_name="$(basename "$file")_$(date +%s)"
mkdir -p “$trash”
if [ -e “$file” ]; then
mv “$file” “$trash/$new_name”
echo "移动到归档: $file -> $trash/$new_name"
else
echo "错误: 找不到 $file"
return 1
fi
}
Usage: safe_remove old_script.sh
10. Status Reporter
演示 Bash 函数返回机制如何用于错误处理。Bash 函数的返回值表示成功 (0) 或失败 (非零):
process_data () {
local file=”$1″
if [ ! -f “$file” ]; then
return 1
fi
# 处理文件
cat “$file” | wc -l
return 0
}
# 检查返回值
process_data “data.txt”
if [ $? -eq 0 ]; then
echo "处理完成"
else
echo "处理失败"
fi
The $? 变量捕获最后一条命令或函数调用的退出状态。
| Function | Purpose | Key Feature |
| backup_file | 创建文件备份 | Timestamped naming |
| ensure_dir | Directory management | Creates if missing |
| log_message | Logging | Timestamp prefix |
| check_disk_space | System monitoring | Threshold alerts |
| validate_input | Input validation | 空字符串检查 |
| check_service | Service monitoring | Systemd integration |
| get_extension | String parsing | Parameter expansion |
| trim_string | String cleanup | Whitespace removal |
| safe_remove | Safe deletion | Trash directory |
| process_data | Error handling | Return values |
在 VPS 上运行 Bash 函数
在专用服务器环境上运行 Bash 函数才能展现真正的威力。我们的 Linux VPS 为你提供完整的 root 权限,自定义 shell 环境、创建系统级函数库,以及无限制地自动化服务器管理任务。
使用 VPS,你可以在 /etc/profile.d/ 中为所有用户存储可重用的函数、通过 cron 任务调度基于函数的脚本、构建部署和维护的自动化管道。我们在全球 12 个地区提供服务器,网络速度高达 40 Gbps、DDR5 内存,这意味着脚本执行更快、数据处理更流畅。
这种级别的控制使 VPS 成为任何认真对待 shell 脚本和系统自动化的人的理想选择。
Conclusion
Bash 函数是创建模块化和可复用脚本的关键。它们让你能够将相关命令组织在一起,封装复杂逻辑,使代码更易读、更易维护。无论是管理云基础设施、自动化部署流程,还是处理日常系统管理任务,函数都能帮你保持脚本的条理性和高效性。
本文介绍了 Bash 函数的基础知识,包括如何定义和调用函数、十个实用的函数示例,以及常见的应用场景,帮助你开始自己的自动化项目。
结合控制结构如 Bash if statement,函数为你提供强大自动化的基础工具。通过在脚本中使用 Bash 函数,你可以编写更清晰、更模块化的代码,更容易理解和维护。