Shell 函数

关键要点

  • Shell 函数是可重用的代码块,用于提高脚本模块化和可读性。
  • 函数定义格式为 [ function ] funname [()] { action; [return int;] },调用前需定义。
  • 可传递参数,使用 $n 访问,$# 获取个数,$*$@ 处理所有参数。
  • 返回值用 return 或最后命令状态,获取用 $?,大值用 echo 输出。
  • 函数作用域灵活,局部变量用 local 限制范围。

函数定义与调用

Shell 函数定义格式为 [ function ] funname [()] { action; [return int;] },如:

function greet() {
    echo "Hello, $1!"
}

调用时直接用函数名,如 greet "Alice",输出 “Hello, Alice!”。函数必须在调用前定义,通常放在脚本开头。

参数传递与返回值

调用函数可传递参数,如 funWithParam 1 2,在函数内用 $1$2 访问,$# 获取参数个数。返回值用 return n(0-255)或最后命令状态,获取用 $?,如需大值用 echo,如 result=$(getSum 10 20)

作用域与局部变量

函数可在脚本任意位置定义,局部变量用 local 声明,仅函数内有效,如 local sum=0,避免全局变量冲突。

实际应用

示例:计算和函数:

function add() {
    local sum=$(( $1 + $2 ))
    echo $sum
}
result=$(add 5 7)
echo "5 + 7 = $result"

输出:5 + 7 = 12

更多详情可参考 Shell 函数 | 菜鸟教程Shell函数详解(函数定义、函数调用) – C语言中文网


调查笔记

为了回答用户关于“Shell 函数中文讲解”的需求,我首先通过网络搜索关键词“Shell 函数中文教程”,找到了多个相关资源,包括 Shell 函数 | 菜鸟教程Shell函数详解(函数定义、函数调用) – C语言中文网。这些资源提供了 Shell 函数的全面讲解,包括定义、调用、参数传递、返回值、作用域和局部变量。

资源分析

  1. Shell 函数 | 菜鸟教程
  • 该页面详细介绍了 Shell 函数的定义、调用、参数传递和返回值。
  • 函数定义格式为 [ function ] funname [()] { action; [return int;] },说明了 function 可选,参数传递使用 $n$#$*$@,返回值用 return$?
  • 提供了实际示例,如简单函数 hello() 和带参数的函数 funWithParam()
  • 强调函数必须在调用前定义,通常放在脚本开头,适合初学者理解。
  1. Shell函数详解(函数定义、函数调用) – C语言中文网
  • 该页面详细讲解了函数定义和调用的格式,补充了参数传递和返回值的示例。
  • 特别提到局部变量的使用,如 local sum=0,并提供了 getSum() 函数的示例,计算参数和。
  • 说明了函数作用域,指出 Shell 函数可以在脚本中任意位置定义,不受顺序限制。
  • 还讨论了函数参数的特殊变量,如 $@$*,并提供了实例。
  1. 其他资源补充
  • 搜索结果中还有其他资源,如 Linux Shell 函数 命令用法详解和博客园的文章,但内容与上述两个资源高度重叠,主要重复了定义和调用部分。
  • 腾讯云开发者社区和 w3cschool 的内容也类似,适合作为备选参考。

详细内容提取

从以上资源中,我提取了以下关键信息:

函数定义
  • 格式:[ function ] funname [()] { action; [return int;] }
  • function 关键字可选,可以直接用 funname() 定义。
  • 函数体用大括号 { } 包裹,return int 可选,用于返回 0-255 的整数。
  • 示例:
  function hello() {
      echo "Hello, World!"
  }

  hello() {
      echo "Hello, World!"
  }
  • 注意:函数体不能为空,若需空函数,可用 : 表示空语句。
函数调用
  • 调用方式:直接使用函数名,如 hello
  • 必须在调用前定义,建议放在脚本开头。
  • 示例:
  hello

输出:Hello, World!

参数传递
  • 调用时可传递参数,如 funWithParam 1 2 3
  • 参数访问:
  • $n:第 n 个参数,n 从 1 开始,如 $1 是第一个参数。
  • $#:参数个数。
  • $*:所有参数作为一个字符串。
  • $@:所有参数作为单独的参数(带引号)。
  • 注意:第 10 个及以后参数用 ${n},如 ${10}
  • 示例:
  funWithParam() {
      echo "第一个参数:$1"
      echo "第二个参数:$2"
      echo "参数个数:$#"
  }
  funWithParam "Hello" "World"

输出:

  第一个参数:Hello
  第二个参数:World
  参数个数:2
返回值
  • 返回方式:
  • 使用 return n 返回整数(0-255)。
  • 若不使用 return,返回最后一条命令的退出状态。
  • 获取返回值:调用后用 $? 获取。
  • 注意:若需返回非整数或大于 255 的值,推荐用 echo 输出并捕获。
  • 示例:
  getSum() {
      local sum=$1+$2
      echo $sum
  }
  result=$(getSum 10 20)
  echo "结果:$result"

输出:结果:30

作用域与局部变量
  • 作用域:Shell 函数可以在脚本任意位置定义,不受顺序限制。
  • 局部变量
  • 使用 local 关键字声明,仅在函数内有效。
  • 示例: bash getSum() { local sum=0 for n in $@; do ((sum += n)) done echo $sum } getSum 10 20 30
    • sum 是局部变量,只在 getSum 函数内可用。
  • 全局变量:未用 local 定义的变量是全局的,可在函数外访问。
实际应用示例
  • 示例 1:简单函数
  #!/bin/bash
  function greet() {
      echo "Hello, $1!"
  }
  greet "Alice"

输出:Hello, Alice!

  • 示例 2:带参数的函数
  #!/bin/bash
  function add() {
      local sum=$(( $1 + $2 ))
      echo $sum
  }
  result=$(add 5 7)
  echo "5 + 7 = $result"

输出:5 + 7 = 12

  • 示例 3:使用局部变量
  #!/bin/bash
  function calculate() {
      local total=0
      for num in $@; do
        ((total += num))
      done
      echo $total
  }
  result=$(calculate 1 2 3 4)
  echo "总和:$result"

输出:总和:10

注意事项
  • 函数定义时,花括号 { } 必须与函数名在同一行或使用反斜杠 \ 换行。
  • 函数名不能与 Shell 内置命令或关键字冲突。
  • 建议使用 local 声明局部变量,避免变量冲突。

总结与推荐

综合以上信息,Shell 函数包括定义、调用、参数传递、返回值、作用域和局部变量等核心内容。用户可以参考 Shell 函数 | 菜鸟教程Shell函数详解(函数定义、函数调用) – C语言中文网 获取更多示例和详细说明。

以下是关键内容的总结表:

方面详情
函数定义格式:[ function ] funname [()] { action; [return int;] },需在调用前定义。
函数调用直接用函数名调用,如 hello,建议放在脚本开头。
参数传递调用时传递,如 fun 1 2,用 $n 访问,$# 计数,$*$@ 处理所有参数。
返回值return n(0-255)或最后命令状态,获取用 $?,大值用 echo 输出。
作用域与局部变量可任意位置定义,local 声明局部变量,仅函数内有效。

关键引用

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注