0Pricing
Linux Command Line & Bash Scripting Mastery · 课时

Bash 脚本中的函数

使用函数组织代码,提升可复用性,让脚本更加整洁且易于维护。

Bash 脚本中的函数 是 CoddyKit 上的免费 Linux Command Line & Bash Scripting Mastery 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Linux Command Line & Bash Scripting Mastery 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Linux Command Line & Bash Scripting Mastery 课程共包含 4 节课。

什么是 Bash 函数?

在 Bash 脚本中,函数是一段用于执行特定任务的代码。您可以把它看作主脚本中的一个小型脚本。

函数可以帮助您:

  • 复用代码:只编写一次某段逻辑,然后多次调用它。
  • 组织脚本:将复杂任务拆分为更小、更易管理的单元。
  • 提高可读性:让脚本更易于理解和维护。

定义简单函数

在 Bash 中定义函数有两种常见方式。两者实现的结果相同,其中第一种语法最常用。

请尝试运行此示例。它定义了函数,但尚未调用它们!

#!/bin/bash

# Method 1: The most common way
my_first_func () {
  echo "Hello from my_first_func!"
}

# Method 2: Using the 'function' keyword
function my_second_func {
  echo "Hello from my_second_func!"
}

echo "Functions defined, but not called."

调用函数

定义函数并不会执行它。要运行函数中的代码,只需像调用其他命令一样,通过函数名调用它即可。

请看我们如何在定义 my_function 后调用它:

#!/bin/bash

my_function () {
  echo "This message is from inside the function."
}

echo "Script started."
my_function # Call the function here
echo "Script finished."

函数中的局部变量

默认情况下,在 Bash 函数内部定义的变量是全局变量,也就是说,您可以在脚本的任何位置访问和修改它们。

为了避免意外的副作用并让函数保持隔离,请使用 local 关键字将变量声明为局部变量。局部变量只存在于该函数中。

#!/bin/bash

global_message="I'm a global message"

my_function () {
  local func_message="I'm a local message"
  global_message="I've been changed by the function!"
  echo "Inside func: $func_message"
  echo "Inside func: $global_message"
}

echo "Before func: $global_message"
my_function
echo "After func: $global_message"
echo "After func: $func_message (This will be empty)"

向函数传递参数

您可以像向常规 shell 命令传递参数一样,使用参数向函数传递信息。在函数内部,可以使用特殊变量访问这些参数:

  • $1、$2、$3……:单个参数
  • $#:参数总数
  • $@:作为独立字符串的所有参数
#!/bin/bash

greet_user () {
  echo "Hello, $1!"
  echo "You are $2 years old."
  echo "Total arguments received: $#"
  echo "All arguments: $@"
}

echo "Calling greet_user with two arguments:"
greet_user "Alice" 30

echo "\nCalling greet_user with one argument:"
greet_user "Bob"

函数退出状态(返回)

函数和任何命令一样,都会返回一个退出状态。按照惯例,0表示成功,任何非零值都表示发生错误。

您可以使用 return 关键字设置退出状态。然后,可以在函数调用后立即使用特殊变量 $? 检查该状态。

#!/bin/bash

check_age () {
  local age=$1
  if [ "$age" -ge 18 ]; then
    return 0 # Success: 18 or older
  else
    return 1 # Failure: under 18
  fi
}

check_age 25
echo "Exit status for 25: $?"

check_age 16
echo "Exit status for 16: $?"

if check_age 20; then
  echo "User is an adult."
else
  echo "User is a minor."
fi

捕获函数输出

return用于发送退出状态;如果您希望函数生成一个可以存储在变量中的“值”,则函数应将该值 echo 到标准输出。

然后,您可以使用命令替换捕获此输出,即将函数调用放在 $(...) 中。

#!/bin/bash

get_full_name () {
  local first_name=$1
  local last_name=$2
  echo "$first_name $last_name" # Echo the full name
}

name="$(get_full_name "John" "Doe")"

echo "Full name captured: $name"

calculate_area () {
  local length=$1
  local width=$2
  echo $((length * width))
}

area=$(calculate_area 10 5)
echo "Calculated area: $area"

实际示例:日志记录器

下面是一个可复用函数的实际示例:一个简单的日志记录器。您可以在脚本中的任何位置调用此函数,让它带时间戳打印消息,从而更轻松地进行调试和跟踪。

#!/bin/bash

log_message () {
  local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
  local message="$1"
  echo "[$timestamp] $message"
}

log_message "Script execution started."
sleep 1 # Simulate some work
log_message "Processing user data..."
sleep 1
log_message "Operation completed successfully."

函数最佳实践

要使用函数编写清晰且易于维护的脚本,请考虑以下建议:

  • 保持简单:每个函数都应当专注于做好一件事。
  • 使用有意义的名称:使用 validate_input 或 create_backup 这类描述性名称。
  • 使用 local:始终在函数内部为变量使用 local,以避免冲突。
  • 添加注释:解释函数的作用、参数以及返回值。
  • 验证输入:如果函数需要特定参数,请检查这些参数。

函数参数检查

测试您对 Bash 函数中参数传递和访问方式的理解。

函数:回顾与后续步骤

做得很好!您已经掌握了 Bash 函数。

本节涵盖了:

  • 定义和调用函数。
  • 使用 local 管理变量作用域。
  • 使用 $1、$#、$@ 传递参数。
  • 使用 return 设置退出状态。
  • 使用 echo 和命令替换捕获输出。

函数对于编写模块化、可复用且易于维护的 Bash 脚本至关重要。请继续练习,让您的脚本更强大、更有条理!

常见问题解答

「Bash 脚本中的函数」课时是免费的吗?

是的 — 「Bash 脚本中的函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Linux Command Line & Bash Scripting Mastery 课程的其余内容,请升级到 CoddyKit PRO。 Linux Command Line & Bash Scripting Mastery 课程共包含 4 节课。

「Bash 脚本中的函数」这节课中我会学到什么?

使用函数组织代码,提升可复用性,让脚本更加整洁且易于维护。 你通过在浏览器中直接运行的动手代码来练习 Linux Command Line & Bash Scripting Mastery,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Linux Command Line & Bash Scripting Mastery 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Linux Command Line & Bash Scripting Mastery 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「Bash 脚本中的函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Linux Command Line & Bash Scripting Mastery 课中编写并运行代码吗?

能。每节 Linux Command Line & Bash Scripting Mastery 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 循环结构(for、while)
  2. Bash 脚本中的函数
  3. 脚本参数与选项($@、$#、getopts)
  4. case 语句与模式匹配
← 返回 Linux Command Line & Bash Scripting Mastery