找回密码
 立即注册
首页 业界区 业界 shell编程之函数

shell编程之函数

佟棠华 2025-6-2 23:52:51
概述

在 Shell 脚本中,函数是一种组织代码的方式,它允许你将一组相关的命令组合在一起,以便在脚本的不同地方重复使用
简单点说就是将shell脚本中重复的代码提取出来,精简脚本的内容,让脚本更加规范,可读性更高。
应用场景


  • 在书写脚本的时候,尽量使用函数,规范脚本
  • 让脚本的开发,更加模块化
  • 方便后期的调试,调试的时候只需要注释函数即可
函数的语法

函数定义使用function关键字,
注意:func_name代表函数名称
第一种(最完整的)
  1. function func_name() {
  2.   shell内容
  3.   shell内容
  4.   ...
  5.   return 返回结果
  6. }
复制代码
第二种
  1. func_name() {
  2.   shell内容
  3.   shell内容
  4.   ...
  5.   return 返回结果
  6. }
复制代码
第三种
  1. function func_name {
  2.   shell内容
  3.   shell内容
  4.   ...
  5.   return 返回结果
  6. }
复制代码
如何调用函数

在脚本中直接使用函数名即可。
调用函数需要在函数声明后调用,如果是声明前调用则会出现异常
示例:
  1. # 编写脚本
  2. [root@master01 ~]# cat shell01.sh
  3. #!/bin/bash
  4. function hello() {
  5.   echo "hello shell"
  6. }
  7. hello
  8. # 加上执行权限
  9. [root@master01 ~]# chmod +x shell01.sh
  10. # 执行脚本
  11. [root@master01 ~]# ./shell01.sh
  12. hello shell
复制代码
如何给函数传递参数

在 Shell 中,函数可以接受参数,这些参数通过位置传递,就像脚本接受命令行参数一样。

  • $1, $2, ... :表示传递给函数的第 1 个、第 2 个... 参数
  • $# :传递给函数的参数个数
  • $@ :所有参数列表
  • $* :所有参数列表(以单个字符串形式)
示例:
  1. # 定义脚本
  2. [root@master01 ~]# cat shell02.sh
  3. #!/bin/bash
  4. function add_number() {
  5. echo '你输入的第一个参数:'$1
  6. echo '你输入的第二个参数:'$2
  7. count=`awk -v num1=$1 -v num2=$2 'BEGIN {print num1+num2}'`
  8. echo '和为:'$count
  9. }
  10. add_number 2 4
  11. # 添加执行权限
  12. [root@master01 ~]# chmod +x shell02.sh
  13. # 执行脚本
  14. [root@master01 ~]# ./shell02.sh
  15. 你输入的第一个参数:2
  16. 你输入的第二个参数:4
  17. 和为:6
复制代码
如何获取函数返回值

Shell 函数的返回值通过退出状态码(exit status)传递,范围是 0-255,其中 0 表示成功,非零表示失败。

  • 使用 return 语句设置返回值
  • 使用 $? 获取函数的返回值
示例:
  1. # 定义脚本
  2. [root@master01 ~]# cat shell03.sh
  3. #!/bin/bash
  4. function add_number() {
  5. echo '你输入的第一个参数:'$1
  6. echo '你输入的第二个参数:'$2
  7. count=`awk -v num1=$1 -v num2=$2 'BEGIN {print num1+num2}'`
  8. echo '和为:'$count
  9. return 222
  10. }
  11. add_number 2 4
  12. echo '函数返回值:'$?
  13. # 给脚本添加执行权限
  14. [root@master01 ~]# chmod +x shell03.sh
  15. # 执行脚本
  16. [root@master01 ~]# ./shell03.sh
  17. 你输入的第一个参数:2
  18. 你输入的第二个参数:4
  19. 和为:6
  20. 函数返回值:222
复制代码
变量作用域

变量根据所在位置不同分为两类:

  • 全局变量:在函数外部定义的变量,函数内部可以直接访问
  • 局部变量:在函数内部使用 local 关键字定义的变量,只在函数内部可见
示例:
  1. global_var="global"
  2. function test_scope {
  3.     local local_var="local"  # 局部变量
  4.     echo "Inside function: global_var=$global_var, local_var=$local_var"
  5. }
  6. # 输出:Inside function: global_var=global, local_var=local
  7. test_scope
  8. # 输出:Outside function: global_var=global, local_var=
  9. echo "Outside function: global_var=$global_var, local_var=$local_var"  
复制代码
注意事项:

  • 函数必须在调用之前定义
  • 函数内部的命令执行失败(返回非零状态码)不会自动终止函数,需要显式处理
  • 函数返回值只能是 0-255 的整数,如果需要返回其他类型的值,可以通过 echo 输出并捕获
  • 使用 local 关键字定义局部变量,避免意外修改全局变量

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册