Shell 函数与可复用代码片段
定义并使用 Bash 函数,将命令封装为可复用、可参数化的 Shell 构建单元。
Shell 函数与可复用代码片段 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
为什么使用 shell 函数
Shell 函数可以将一组命令归于一个名称之下,以便重复使用而无需重新输入。
- 比复制粘贴命令更快
- 比冗长的别名更整洁
- 可以接受参数,而别名不能
mkcd() {
mkdir -p "$1" && cd "$1"
}定义函数
最简单的形式使用 name() { ... } 语法。大括号中的命令会在您按名称调用函数时运行。
greet() {
echo "Hello from a function"
}
greet函数参数
函数接收位置参数,就像脚本一样:$1、$2。$# 表示数量,$@ 会展开为所有参数。
backup() {
cp "$1" "$1.bak"
echo "Backed up $1"
}
backup notes.txt返回值与退出状态
函数通过 return N 返回退出状态(0-255)。请将其用于成功或失败检查,而不要用于返回数据。
is_root() {
[ "$(id -u)" -eq 0 ] && return 0 || return 1
}
if is_root; then echo root; else echo normal; fi通过 echo 返回输出
由于 return 只能传递状态代码,实际输出应使用 $( ) 打印并捕获。
timestamp() {
date +%Y%m%d-%H%M%S
}
name="log-$(timestamp).txt"
echo "$name"局部变量
默认情况下,函数中的变量是全局变量。使用 local 将变量的作用域限制在函数内,避免污染 shell。
count_lines() {
local n
n=$(wc -l < "$1")
echo "$1 has $n lines"
}默认参数值
使用参数展开 ${1:-default},在参数缺失时回退到默认值。
say() {
local msg="${1:-Hello World}"
echo "$msg"
}
say
say "Custom message"函数与别名
别名只是替换文本,无法简洁地接收位置参数。函数可以进行分支、循环和输入处理。
- 固定快捷方式请使用别名
- 需要逻辑或参数时请使用函数
alias ll='ls -la'
lt() { ls -la "${1:-.}" | tail -n "${2:-5}"; }使函数持久生效
在提示符中定义的函数会在 shell 退出时消失。将它们添加到 ~/.bashrc,即可在每个会话中使用。
# Append to ~/.bashrc
extract() {
case "$1" in
*.tar.gz) tar xzf "$1" ;;
*.zip) unzip "$1" ;;
*) echo "Unknown format" ;;
esac
}列出和删除函数
declare -F 会列出函数名称;declare -f name 会显示函数体。使用 unset -f name 删除函数。
declare -F
declare -f greet
unset -f greet组合函数
函数可以调用其他函数,从而将小型可复用组件组合成更大的工具。
log() { echo "[$(date +%T)] $*"; }
deploy() {
log "Starting deploy"
log "Done"
}
deploy快速检查
检验您对 shell 函数的理解。
回顾
您已经学会构建可复用的 shell函数:
- 使用
name() { ... }定义,并通过名称调用 - 使用
$1、$@、$#处理参数,并使用return返回状态 - 使用
local限定变量作用域,通过echo返回数据 - 将函数持久保存到
~/.bashrc,并使用declare -f查看
常见问题解答
「Shell 函数与可复用代码片段」课时是免费的吗?
是的 — 「Shell 函数与可复用代码片段」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「Shell 函数与可复用代码片段」这节课中我会学到什么?
定义并使用 Bash 函数,将命令封装为可复用、可参数化的 Shell 构建单元。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「Shell 函数与可复用代码片段」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 作业控制(bg、fg、jobs)
- Shell 展开与通配
- 别名与自定义提示符
- Shell 函数与可复用代码片段